最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

教你怎么使用Optional處理null

 更新時(shí)間:2021年05月19日 11:02:53   作者:小老虎Love  
今天教各位小伙伴怎么使用Optional處理null,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很大的幫助,需要的朋友可以參考下

一、聊聊NullPointerException

相比做Java開(kāi)發(fā)的,見(jiàn)到NullPointerException肯定不陌生吧,可以說(shuō)見(jiàn)到它深?lèi)和唇^。在開(kāi)發(fā)時(shí)認(rèn)為不會(huì)出現(xiàn)NullPointerException異常,最終到了生產(chǎn)環(huán)境,就給你來(lái)點(diǎn)意外驚喜。但是在開(kāi)發(fā)時(shí)處理對(duì)象為空的通常都是用if(null != xxx),或者使用一些工具類(lèi),比如:if(ObjectUtils.isEmpty(xxx)),可以看出這種處理會(huì)讓我們的代碼變得很臃腫,遇到一個(gè)對(duì)象時(shí)可能都要這樣來(lái)一下。

使用Optional類(lèi)就可以避免在程序中使用一堆的if來(lái)處理空了。下表列出Optional類(lèi)中的方法:

方法名 描述
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類(lèi)型的值,否則就返回一個(gè)空的Optional對(duì)象
orElse 如果值存在就將其返回,否則返回指定的的值
orElseGet 如果值存在就將其返回,否則返回由指定的Supplier接口生成的值
orElseThrow 如果值存在就將其返回,否則拋出由指定的Supplier接口生成的異常

下面就一一來(lái)詳細(xì)使用上面列出的方法。

二、使用Optional類(lèi)

2.1 empty

Optional<User> user = Optional.empty();

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

2.2 of

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

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

2.3 ofNullable

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

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

2.4 get

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

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

2.5 isPresent

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

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

2.6 ifPresent

User user = null;
Optional<User> 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

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

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());
        }
    }
}

為了程序不出問(wèn)題,就會(huì)寫(xiě)一大堆的if來(lái)判斷,下面用flatMap來(lái)看下怎么實(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類(lèi)的全部方法的使用都列出來(lái)了。

到此這篇關(guān)于教你怎么使用Optional處理null的文章就介紹到這了,更多相關(guān)Optional處理null內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入探究HashMap二次Hash原因

    深入探究HashMap二次Hash原因

    在java開(kāi)發(fā)中,HashMap是最常用、最常見(jiàn)的集合容器類(lèi)之一,文中通過(guò)示例代碼介紹HashMap為啥要二次Hash,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 基于SpringBoot實(shí)現(xiàn)圖片上傳及圖片回顯

    基于SpringBoot實(shí)現(xiàn)圖片上傳及圖片回顯

    本篇文章主要介紹了SpringBoot如何實(shí)現(xiàn)圖片上傳及圖片回顯,文中通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-08-08
  • Java concurrency集合之ConcurrentLinkedQueue_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java concurrency集合之ConcurrentLinkedQueue_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要介紹了Java concurrency集合之ConcurrentLinkedQueue,需要的朋友可以參考下
    2017-06-06
  • 深入理解java自旋鎖

    深入理解java自旋鎖

    這篇文章主要介紹了如何深入理解java自旋鎖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面和小編來(lái)一起學(xué)習(xí)下吧
    2019-05-05
  • Java開(kāi)發(fā)之普通web項(xiàng)目轉(zhuǎn)為Maven項(xiàng)目的方法

    Java開(kāi)發(fā)之普通web項(xiàng)目轉(zhuǎn)為Maven項(xiàng)目的方法

    這篇文章主要給大家介紹了關(guān)于Java開(kāi)發(fā)之普通web項(xiàng)目轉(zhuǎn)為Maven項(xiàng)目的相關(guān)資料,文中通過(guò)圖文將轉(zhuǎn)換的方法步驟介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-12-12
  • Mybatis使用IN語(yǔ)句查詢的實(shí)現(xiàn)

    Mybatis使用IN語(yǔ)句查詢的實(shí)現(xiàn)

    這篇文章主要介紹了Mybatis使用IN語(yǔ)句查詢的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java使用位運(yùn)算實(shí)現(xiàn)加減乘除詳解

    Java使用位運(yùn)算實(shí)現(xiàn)加減乘除詳解

    這篇文章主要為大家詳細(xì)介紹了Java如何使用位運(yùn)算實(shí)現(xiàn)加減乘除,文中的示例代碼講解詳細(xì),對(duì)我們深入了解Java有一定的幫助,感興趣的可以了解一下
    2023-05-05
  • 基于java中stack與heap的區(qū)別,java中的垃圾回收機(jī)制的相關(guān)介紹

    基于java中stack與heap的區(qū)別,java中的垃圾回收機(jī)制的相關(guān)介紹

    本篇文章小編將為大家介紹,基于java中stack與heap的區(qū)別,java中的垃圾回收機(jī)制的相關(guān)介紹,需要的可以參考一下
    2013-04-04
  • java并發(fā)訪問(wèn)重復(fù)請(qǐng)求過(guò)濾問(wèn)題

    java并發(fā)訪問(wèn)重復(fù)請(qǐng)求過(guò)濾問(wèn)題

    本篇文章給大家分享了關(guān)于java并發(fā)訪問(wèn)重復(fù)請(qǐng)求過(guò)濾的相關(guān)問(wèn)題以及解決方法,對(duì)此有需要的朋友參考學(xué)習(xí)下。
    2018-05-05
  • Spring Cloud LoadBalancer 負(fù)載均衡詳解

    Spring Cloud LoadBalancer 負(fù)載均衡詳解

    本文介紹了如何在Spring Cloud中使用SpringCloudLoadBalancer實(shí)現(xiàn)客戶端負(fù)載均衡,并詳細(xì)講解了輪詢策略和隨機(jī)策略的配置方法,此外,還提供了部署到云服務(wù)器并在多個(gè)實(shí)例之間進(jìn)行負(fù)載均衡的步驟,感興趣的朋友一起看看吧
    2025-02-02

最新評(píng)論

通州区| 曲阳县| 神农架林区| 镇巴县| 防城港市| 肥城市| 富平县| 铜鼓县| 龙胜| 巩义市| 临江市| 惠东县| 麻阳| 禹城市| 巫山县| 茶陵县| 邳州市| 海南省| 太和县| 汕尾市| 武宁县| 宁明县| 砚山县| 保亭| 黑龙江省| 方城县| 瑞金市| 山阳县| 鲁甸县| 清镇市| 冷水江市| 镇巴县| 松江区| 黎川县| 青阳县| 呼伦贝尔市| 农安县| 沙田区| 南华县| 泸溪县| 靖远县|