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

Java實(shí)現(xiàn)Optional優(yōu)雅地判空的使用

 更新時(shí)間:2025年07月10日 09:54:03   作者:鄧不利東  
本文介紹了Java8的Optional類如何在實(shí)際業(yè)務(wù)中用于更優(yōu)雅地處理變量和對(duì)象的判空問(wèn)題,包括設(shè)置默認(rèn)值、創(chuàng)建集合以及獲取對(duì)象屬性等場(chǎng)景,感興趣的可以了解一下

前言

Optional類是JDK8引入的一個(gè)新類。在這之前,Java在變量、對(duì)象、集合的判空處理上并不優(yōu)雅。本篇博客以實(shí)際業(yè)務(wù)場(chǎng)景為例梳理Optional類在實(shí)際業(yè)務(wù)場(chǎng)景中如何優(yōu)雅地判空,并不會(huì)連篇累牘地介紹Optional類的所有api及用法。

如果你想全面地學(xué)習(xí)并了解Optional類的用法,以及類里的所有api,麻煩移步其他博客。

場(chǎng)景一、

  1. 當(dāng)需要對(duì)變量判空,如果為空則設(shè)置默認(rèn)值;

  1. 當(dāng)需要對(duì)對(duì)象或集合判空,如果為空則新建;

// 比如有一個(gè)String類型的變量str,需要對(duì)其判空,如果為空則設(shè)置為空字符串
// 這個(gè)場(chǎng)景十分普遍。就是當(dāng)從數(shù)據(jù)庫(kù)請(qǐng)求到數(shù)據(jù)后,需要封裝后返回給前端,這時(shí)對(duì)字段就需要做判空處理。
String str = Optional.ofNullable(str).orElse(Strings.EMPTY);
 
 
// 比如有一個(gè)ArrayList類型的變量strList,需要對(duì)其判空,如果為空則new一個(gè)ArrayList
List<String> newList = Optional.ofNullable(strList).orElse(new ArrayList<>());
 
// 這時(shí)如果需求變了,如果為空則new一個(gè)有默認(rèn)值的ArrayList,則可以寫(xiě)成如下:
List<String> newList2 = Optional.ofNullable(strList).orElseGet(()->{
            List<String> strList2 = new ArrayList<>();
            strList2.add("1");
            strList2.add("2");
            strList2.add("3");
            return strList2;
        });
 
// 這時(shí)我們發(fā)現(xiàn)這樣的寫(xiě)法可讀性太差,不優(yōu)雅,則可以把lambda表達(dá)式中的這段代碼抽離成獨(dú)立的方法,寫(xiě)成如下:
List<String> newList3 = Optional.ofNullable(strList).orElseGet(() -> getDefaultList());
 
public static List<String> getDefaultList() {
    List<String> strList2 = new ArrayList<>();
    strList2.add("1");
    strList2.add("2");
    strList2.add("3");
    return strList2;
}
 
// 這時(shí),如果發(fā)現(xiàn)其實(shí)new出來(lái)的這個(gè)新的ArrayList后續(xù)不需要做增刪操作,只用于讀操作,那么又可以簡(jiǎn)化成如下:
List<String> newList4 = Optional.ofNullable(strList).orElse(Arrays.asList("1", "2", "3"));

場(chǎng)景二、

  1. 對(duì)變量判空后,如果變量有值,需要做其他的業(yè)務(wù)處理;

// 比如有一個(gè)String類型的變量str,需要對(duì)其判空,如果非空則將該變量放入一個(gè)ArrayList中,則可以寫(xiě)成如下:
List<String> strList = new ArrayList<>();
Optional.ofNullable(str).ifPresent(e-> strList.add(e));
 
// 這里,上面的代碼其實(shí)也可以用lambda表達(dá)式中的“方法引用”方式簡(jiǎn)寫(xiě)成如下:
Optional.ofNullable(str).ifPresent(strList::add);

場(chǎng)景三、

  1. 對(duì)對(duì)象判空后,如果對(duì)象有值,需要提取該對(duì)象中的屬性值;

// 如下場(chǎng)景就是對(duì)user對(duì)象判空,如果user不為空,則取出user對(duì)象的username字段值
User user = new User();
String userName = Optional.ofNullable(user).map(e -> user.getUsername()).orElse(Strings.EMPTY);
 
// 同理,上面的代碼也可以用lambda表達(dá)式中的“方法引用”方式簡(jiǎn)寫(xiě)
String userName = Optional.ofNullable(user).map(User::getUsername).orElse(Strings.EMPTY);

到此這篇關(guān)于Java實(shí)現(xiàn)Optional優(yōu)雅地判空的使用的文章就介紹到這了,更多相關(guān)Java Optional判空內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JAVA實(shí)現(xiàn)Excel和PDF上下標(biāo)的操作代碼

    JAVA實(shí)現(xiàn)Excel和PDF上下標(biāo)的操作代碼

    這篇文章主要介紹了JAVA實(shí)現(xiàn)Excel和PDF上下標(biāo),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • java多線程中的異常處理機(jī)制簡(jiǎn)析

    java多線程中的異常處理機(jī)制簡(jiǎn)析

    在java多線程程序中,所有線程都不允許拋出未捕獲的checked exception,也就是說(shuō)各個(gè)線程需要自己把自己的checked exception處理掉,需要了解的朋友可以參考下
    2012-11-11
  • SpringBoot優(yōu)雅的進(jìn)行全局異常處理的實(shí)現(xiàn)步驟

    SpringBoot優(yōu)雅的進(jìn)行全局異常處理的實(shí)現(xiàn)步驟

    在軟件開(kāi)發(fā)的世界里,異常處理是保證系統(tǒng)穩(wěn)定性和用戶體驗(yàn)的關(guān)鍵因素之一,尤其是在構(gòu)建基于微服務(wù)架構(gòu)的應(yīng)用時(shí),SpringBoot提供了一套強(qiáng)大的工具來(lái)幫助開(kāi)發(fā)者管理這些異常,所以本文給大家介紹了SpringBoot如何優(yōu)雅的進(jìn)行全局異常處理,需要的朋友可以參考下
    2025-02-02
  • SpringBoot JSON全局日期格式轉(zhuǎn)換器實(shí)現(xiàn)方式

    SpringBoot JSON全局日期格式轉(zhuǎn)換器實(shí)現(xiàn)方式

    這篇文章主要介紹了SpringBoot JSON全局日期格式轉(zhuǎn)換器,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Java代碼是如何被CPU狂飆起來(lái)的

    Java代碼是如何被CPU狂飆起來(lái)的

    無(wú)論是剛剛?cè)腴T(mén)Java的新手還是已經(jīng)工作了的老司機(jī),恐怕都不容易把Java代碼如何一步步被CPU執(zhí)行起來(lái)這個(gè)問(wèn)題完全講清楚。本文就帶你詳細(xì)了解Java代碼到底是怎么運(yùn)行起來(lái)的。感興趣的同學(xué)可以參考閱讀
    2023-03-03
  • maven依賴沖突加載順序與解決

    maven依賴沖突加載順序與解決

    這篇文章主要介紹了項(xiàng)目中同時(shí)引用了相同依賴的不同版本,也就是沖突,maven?是如何選擇的,了解了有助于解決項(xiàng)目中的依賴問(wèn)題,需要的朋友可以參考下
    2024-01-01
  • Java中使用正則表達(dá)式獲取網(wǎng)頁(yè)中所有圖片的路徑

    Java中使用正則表達(dá)式獲取網(wǎng)頁(yè)中所有圖片的路徑

    這篇文章主要介紹了Java中使用正則表達(dá)式獲取網(wǎng)頁(yè)中所有圖片的路徑,本文直接給出實(shí)例代碼,需要的朋友可以參考下
    2015-06-06
  • Java格式化小數(shù)并保留兩位小數(shù)的四種方法

    Java格式化小數(shù)并保留兩位小數(shù)的四種方法

    Java中格式化小數(shù)并保留兩位小數(shù)的四種方法:使用DecimalFormat、String.format()、BigDecimal和NumberFormat,每種方法都有其適用場(chǎng)景和特點(diǎn),文章通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2025-03-03
  • 基于Java + OpenClaw搭建本地大模型私有化的方案

    基于Java + OpenClaw搭建本地大模型私有化的方案

    數(shù)據(jù)不出內(nèi)網(wǎng)、模型本地跑、代碼自己控——本文這套方案教你用Java+OpenClaw搭建企業(yè)級(jí)私有AI中樞,告別數(shù)據(jù)裸奔,讓核心資料安心喂給AI,需要的朋友可以參考下
    2026-03-03
  • 詳解Springboot集成sentinel實(shí)現(xiàn)接口限流入門(mén)

    詳解Springboot集成sentinel實(shí)現(xiàn)接口限流入門(mén)

    這篇文章主要介紹了詳解Springboot集成sentinel實(shí)現(xiàn)接口限流入門(mén),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11

最新評(píng)論

蓬溪县| 博爱县| 故城县| 双流县| 平定县| 汤原县| 安义县| 慈溪市| 大田县| 惠安县| 安达市| 顺义区| 甘德县| 上思县| 驻马店市| 凌云县| 若羌县| 丹凤县| 双流县| 沈丘县| 浮山县| 礼泉县| 华池县| 兰考县| 闵行区| 武邑县| 巫溪县| 磐石市| 犍为县| 余姚市| 新邵县| 陵水| 亳州市| 维西| 绩溪县| 贡嘎县| 承德县| 滕州市| 思南县| 汉阴县| 峨眉山市|