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

快速掌握J(rèn)ava8中的Optional

 更新時(shí)間:2023年07月13日 11:51:10   作者:偏愛(ài)星霧纏繞15  
Optional 是一個(gè)容器類(lèi),代表一個(gè)值存在或不存在,Optional并不是用來(lái)替換所有的null,而是為了在設(shè)計(jì)良好的API中更明確地表達(dá)可能缺失的值,這篇文章主要介紹了Java8的Optional及使用,需要的朋友可以參考下

自從Java 8在2014年發(fā)布以來(lái),它引入了很多有用的特性,其中之一就是Optional類(lèi)。這個(gè)類(lèi)被設(shè)計(jì)成Java語(yǔ)言的一個(gè)解決方案,用于解決空指針異常(NullPointerException),這是Java開(kāi)發(fā)者們面臨的常見(jiàn)問(wèn)題之一。在這篇博客中,我們將深入探討Java的Optional。

什么是 Optional?

Optional 是一個(gè)容器類(lèi),代表一個(gè)值存在或不存在。原始版本的Java沒(méi)有空安全的類(lèi)型,這意味著任何東西都可能是null,而這經(jīng)常會(huì)導(dǎo)致NullPointerException。因此,Optional的出現(xiàn)使得我們可以更優(yōu)雅地處理可能為null的情況。

如何使用Optional?

創(chuàng)建Optional對(duì)象

創(chuàng)建一個(gè)非空的Optional

// 使用of方法創(chuàng)建包含值的Optional。參數(shù)不能為null,否則會(huì)立即拋出NullPointerException。
Optional<String> optional = Optional.of("Hello World");

創(chuàng)建一個(gè)可能為空的Optional

// 使用ofNullable方法創(chuàng)建可以包含null的Optional。如果參數(shù)為null,它將創(chuàng)建一個(gè)空的Optional對(duì)象。
Optional<String> optionalNullable = Optional.ofNullable(null);

訪(fǎng)問(wèn)Optional對(duì)象的值

使用get()方法來(lái)獲取Optional的值,如果Optional為空則拋出NoSuchElementException異常:

String value = optional.get();

使用isPresent()方法來(lái)檢查Optional是否有值:

// isPresent方法用于檢查Optional實(shí)例中是否包含非null值。
if (optional.isPresent()) {
    System.out.println("Value found - " + optional.get());
}

使用ifPresent()方法進(jìn)行更優(yōu)雅的檢查和使用:

// ifPresent方法接收一個(gè)Consumer(消費(fèi)者)參數(shù),僅當(dāng)Optional中有值存在時(shí),才執(zhí)行傳入的lambda表達(dá)式(或方法引用)。
optional.ifPresent(value -> System.out.println("Value found - " + value));

如果你想在Optional為空的時(shí)候提供一個(gè)備用值,你可以使用orElse()方法:

 
// orElse方法允許在Optional對(duì)象不包含值時(shí)提供一個(gè)備選值。
String nullDefault = optionalNullable.orElse("Default Value");
System.out.println(nullDefault); // 輸出:Default Value

或者使用orElseGet()方法進(jìn)行延遲計(jì)算備用值:

String value = optional.orElseGet(() -> "default value");

鏈?zhǔn)秸{(diào)用Optional

Optional還支持鏈?zhǔn)椒椒ㄕ{(diào)用,如mapflatMap,這使得它能夠和Java 8的其他特性如Streamlambda表達(dá)式一起更好地工作:

map 和 flatMap

mapflatMap 方法在函數(shù)式編程中用得非常廣泛,它們也在Optional中被定義:

// 假設(shè)有一個(gè)方法parse(String str),str可能為null,解析后的結(jié)果也可能為null
Optional<String> str = Optional.ofNullable(getStr());
// 不使用map,我們需要進(jìn)行兩次null檢查
if(str != null){
    String result = parse(str);
    if(result != null){
        System.out.println(result);
    }
}
// 使用Optional和map,可以避免顯示null檢查
str.map(this::parse).ifPresent(System.out::println);

注意,map操作需要Function作為參數(shù),所以你的方法不能返回Optional類(lèi)型。如果你要返回Optional,你應(yīng)該使用flatMap,否則你會(huì)得到套裝的Optional:

// 使用map,你會(huì)得到Optional<Optional<Integer>>
Optional<Optional<Integer>> nestedOptional = str.map(this::parseToOptional);
// 使用flatMap,你會(huì)得到Optional<Integer>
Optional<Integer> flatOptional = str.flatMap(this::parseToOptional);

filter

filter方法與Stream中的filter類(lèi)似,它接收Predicate參數(shù),用于測(cè)試Optional中是否有值符合給定的條件:

Optional<String> filtered = str.filter(val -> val.length() > 3);
// 如果Optional中的值長(zhǎng)度大于3,那么仍舊返回包含該值的Optional
// 否則返回一個(gè)空的Optional實(shí)例

總結(jié)起來(lái),Optional并不是用來(lái)替換所有的null,而是為了在設(shè)計(jì)良好的API中更明確地表達(dá)可能缺失的值。通過(guò)明晰地表示"值可能不存在",Optional可以幫助我們?cè)O(shè)計(jì)更清晰、更易于理解的API,從而減少Bug的出現(xiàn)率。

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

相關(guān)文章

  • java錯(cuò)誤:?不支持發(fā)行版本?22的簡(jiǎn)單解決方法

    java錯(cuò)誤:?不支持發(fā)行版本?22的簡(jiǎn)單解決方法

    這篇文章主要給大家介紹了關(guān)于java錯(cuò)誤:?不支持發(fā)行版本?22的簡(jiǎn)單解決方法,這個(gè)錯(cuò)誤通常是由于Java版本不兼容導(dǎo)致的,請(qǐng)檢查您的項(xiàng)目所使用的Java版本是否與您當(dāng)前安裝的Java版本一致,需要的朋友可以參考下
    2024-06-06
  • Java堆外內(nèi)存溢出的緊急處理技巧

    Java堆外內(nèi)存溢出的緊急處理技巧

    在高并發(fā)的Java應(yīng)用場(chǎng)景中,堆外內(nèi)存溢出往往是最難排查的問(wèn)題之一,當(dāng)SpringBoot項(xiàng)目出現(xiàn)內(nèi)存異常時(shí),傳統(tǒng)的堆內(nèi)存分析工具常常束手無(wú)策,因?yàn)槎淹鈨?nèi)存不受JVM堆內(nèi)存管理機(jī)制的直接控制,本文將通過(guò)一個(gè)真實(shí)的電商緩存服務(wù)案例,完整展示從問(wèn)題發(fā)現(xiàn)到定位再到解決的全流程
    2025-06-06
  • Java如何使用poi導(dǎo)入導(dǎo)出excel工具類(lèi)

    Java如何使用poi導(dǎo)入導(dǎo)出excel工具類(lèi)

    這篇文章主要介紹了Java如何使用poi導(dǎo)入導(dǎo)出excel工具類(lèi)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Java使用Knife4j優(yōu)化Swagger接口文檔的操作步驟

    Java使用Knife4j優(yōu)化Swagger接口文檔的操作步驟

    在現(xiàn)代微服務(wù)開(kāi)發(fā)中,接口文檔的質(zhì)量直接影響了前后端協(xié)作效率,Swagger 作為一個(gè)主流的接口文檔工具,雖然功能強(qiáng)大,但其默認(rèn)界面和部分功能在實(shí)際使用中略顯不足,而 Knife4j 的出現(xiàn)為我們提供了一種增強(qiáng)的選擇,本篇文章將詳細(xì)介紹如何在項(xiàng)目中集成和使用 Knife4j
    2024-12-12
  • Java中兩個(gè)大數(shù)之間的相關(guān)運(yùn)算及BigInteger代碼示例

    Java中兩個(gè)大數(shù)之間的相關(guān)運(yùn)算及BigInteger代碼示例

    這篇文章主要介紹了Java中兩個(gè)大數(shù)之間的相關(guān)運(yùn)算及BigInteger代碼示例,通過(guò)biginteger類(lèi)實(shí)現(xiàn)大數(shù)的運(yùn)算代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • Springboot整合微信支付(訂單過(guò)期取消及商戶(hù)主動(dòng)查單)

    Springboot整合微信支付(訂單過(guò)期取消及商戶(hù)主動(dòng)查單)

    本文主要介紹了Springboot整合微信支付(訂單過(guò)期取消及商戶(hù)主動(dòng)查單),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • Jmeter中正則表達(dá)式提取器使用詳解

    Jmeter中正則表達(dá)式提取器使用詳解

    本文主要介紹了Jmeter中正則表達(dá)式提取器使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java注解@Transactional事務(wù)類(lèi)內(nèi)調(diào)用不生效問(wèn)題及解決辦法

    Java注解@Transactional事務(wù)類(lèi)內(nèi)調(diào)用不生效問(wèn)題及解決辦法

    這篇文章主要介紹了Java注解@Transactional事務(wù)類(lèi)內(nèi)調(diào)用不生效問(wèn)題及解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Java中的Optional類(lèi)詳細(xì)解讀

    Java中的Optional類(lèi)詳細(xì)解讀

    這篇文章主要介紹了Java中的Optional類(lèi)詳細(xì)解讀,Optional是Java中的一個(gè)類(lèi),它的作用是用于解決空指針異常的問(wèn)題,它提供了一些有用的方法,可以幫助我們避免顯式進(jìn)行空值檢測(cè),需要的朋友可以參考下
    2023-08-08
  • 淺談Spring Boot中Redis緩存還能這么用

    淺談Spring Boot中Redis緩存還能這么用

    這篇文章主要介紹了淺談Spring Boot中Redis緩存還能這么用,這種方式是Spring Cache提供的統(tǒng)一接口,實(shí)現(xiàn)既可以是Redis,也可以是Ehcache或者其他支持這種規(guī)范的緩存框架,感興趣的小伙伴們可以參考一下
    2019-06-06

最新評(píng)論

海安县| 枣庄市| 宣化县| 加查县| 兴城市| 钟山县| 霍邱县| 墨脱县| 柘城县| 萨迦县| 福建省| 房产| 兴文县| 邻水| 平罗县| 樟树市| 中阳县| 台北市| 蓬安县| 株洲县| 怀宁县| 长丰县| 巴东县| 海兴县| 老河口市| 咸丰县| 通城县| 张掖市| 永修县| 永仁县| 东方市| 南通市| 阿巴嘎旗| 工布江达县| 噶尔县| 布拖县| 南康市| 延边| 兴义市| 库伦旗| 大竹县|