最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Optional處理null的方法有哪些

這篇文章主要講解了“Optional處理null的方法有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Optional處理null的方法有哪些”吧!

10年專注成都網(wǎng)站制作,成都定制網(wǎng)站,個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于成都定制網(wǎng)站,高端網(wǎng)頁制作,對(duì)食品包裝袋等多個(gè)領(lǐng)域,擁有多年的營(yíng)銷推廣經(jīng)驗(yàn)。

一、聊聊NullPointerException

??相比做Java開發(fā)的,見到NullPointerException肯定不陌生吧,可以說見到它深惡痛絕。在開發(fā)時(shí)認(rèn)為不會(huì)出現(xiàn)NullPointerException異常,最終到了生產(chǎn)環(huán)境,就給你來點(diǎn)意外驚喜。但是在開發(fā)時(shí)處理對(duì)象為空的通常都是用if(null != xxx),或者使用一些工具類,比如:if(ObjectUtils.isEmpty(xxx)),可以看出這種處理會(huì)讓我們的代碼變得很臃腫,遇到一個(gè)對(duì)象時(shí)可能都要這樣來一下。 ??使用Optional類就可以避免在程序中使用一堆的if來處理空了。下表列出Optional類中的方法: |方法名|描述| |:--|:-- |empty|返回一個(gè)空的Optional實(shí)例 |of|將指定值用Optional封裝后返回,如果值為null,則拋出NullPointerException異常 |ofNullable|將指定值用Optional封裝后返回,如果值為null,則返回空的Optional對(duì)象 |get|如果值存在,則返回該值,否則拋出NullPointerException異常 |isPresent|檢查值是否存在,存在返回true,否則返回false |ifPresent|如果值存在,就執(zhí)行使用該值的方法調(diào)用,否則什么都不做 |filter|如果值存在并且滿足提供的謂詞,就返回包含該值的Optional對(duì)象,否則返回空的Optional對(duì)象 |map|如果值存在,就對(duì)該值執(zhí)行提供的mapping函數(shù)調(diào)用 |flatMap|如果值存在,就對(duì)該值執(zhí)行提供的mapping函數(shù)調(diào)用,返回一個(gè)Optional類型的值,否則就返回一個(gè)空的Optional對(duì)象 |orElse|如果值存在就將其返回,否則返回指定的的值 |orElseGet|如果值存在就將其返回,否則返回由指定的Supplier接口生成的值 |orElseThrow|如果值存在就將其返回,否則拋出由指定的Supplier接口生成的異常 下面就一一來詳細(xì)使用上面列出的方法。

二、使用Optional類

2.1 empty

Optional user = Optional.empty();

創(chuàng)建一個(gè)空的Optional對(duì)象

2.2 of

User user = null;
Optional optional = Optional.of(user);

user為空,直接報(bào)NullPointerException異常,因此該方法一般很少用。

2.3 ofNullable

User user = null;
Optional optional = Optional.ofNullable(user);

user為空,則返回空的Optional對(duì)象

2.4 get

User user = null;
Optional optional = Optional.ofNullable(user);
optional.get();

Optional中獲取值,如果值不存在則拋出如下異常:java.util.NoSuchElementException: No value present

2.5 isPresent

User user = null;
Optional optional = Optional.ofNullable(user);
optional.isPresent();

以上例子返回false,如果user不為空,則返回true

2.6 ifPresent

User user = null;
Optional optional = Optional.ofNullable(user);
optional.ifPresent(us->{
    //user不為空,執(zhí)行 
});

2.7 filter

User user = new User();
user.setName("小A");
boolean result = Optional.ofNullable(user).filter(us -> "小A".equals(us.getName())).isPresent();

如果用戶名為小A,則返回true,否則返回false

2.8 map

User user = new User();
user.setName("小A");
String name = Optional.ofNullable(user).map(User::getName).get();

如果user不為空,則抽取name屬性,使用get()獲取。這里如果name為空,則會(huì)報(bào)異常,因此通常都是指定默認(rèn)值或使用自定義異常拋出。

String name = Optional.ofNullable(user).map(User::getName).orElse("");

String name = Optional.ofNullable(user)
                .map(User::getName)
                .orElseThrow(()->new RuntimeException("用戶名不能為空"));

2.9 flatMap

該方法一般用于從類中獲取其他類的中某個(gè)屬性,比如一個(gè)班級(jí)里面有學(xué)生,學(xué)生里面有地址,現(xiàn)在需要獲取這個(gè)班級(jí)下的某個(gè)學(xué)生的地址,按之前的寫法:

Address address = new Address();
address.setAddr("天河區(qū)");

Student student = new Student();
student.setName("小A");
student.setAddress(address);

Grade grade = new Grade();
grade.setName("三年級(jí)2班");
grade.setStudent(student);

if(!ObjectUtils.isEmpty(grade)){
    Student student1 = grade.getStudent();
    if(!ObjectUtils.isEmpty(student1)){
        Address address1 = student1.getAddress();
        if(!ObjectUtils.isEmpty(address1)){
            System.out.println(address1.getAddr());
        }
    }
}

為了程序不出問題,就會(huì)寫一大堆的if來判斷,下面用flatMap來看下怎么實(shí)現(xiàn):

Optional.ofNullable(grade)
                .flatMap(g->Optional.ofNullable(g.getStudent()))
                .flatMap(s->Optional.ofNullable(s.getAddress()))
                .map(Address::getAddr)
                .orElse("")

Optional.ofNullable(grade)
        .map(Grade::getStudent)
        .map(Student::getAddress)
        .map(Address::getAddr)
        .orElse("")

2.10 orElse

Optional.ofNullable(grade).orElse(new Grade());

2.11 orElseGet

Optional.ofNullable(grade).orElseGet(()->new Grade());

2.12 orElseThrow

Optional.ofNullable(grade).orElseThrow(()->new RuntimeException("班級(jí)不能為空"));

以上Optional類的全部方法的使用都列出來了。

感謝各位的閱讀,以上就是“Optional處理null的方法有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)Optional處理null的方法有哪些這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!


文章標(biāo)題:Optional處理null的方法有哪些
本文網(wǎng)址:http://fisionsoft.com.cn/article/jssejg.html