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

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

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

前言

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

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

場景一、

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

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

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

場景二、

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

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

場景三、

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

// 如下場景就是對user對象判空,如果user不為空,則取出user對象的username字段值
User user = new User();
String userName = Optional.ofNullable(user).map(e -> user.getUsername()).orElse(Strings.EMPTY);
 
// 同理,上面的代碼也可以用lambda表達(dá)式中的“方法引用”方式簡寫
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)容請搜索腳本之家以前的文章或繼續(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),本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-09-09
  • java多線程中的異常處理機(jī)制簡析

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

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

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

    在軟件開發(fā)的世界里,異常處理是保證系統(tǒng)穩(wěn)定性和用戶體驗(yàn)的關(guān)鍵因素之一,尤其是在構(gòu)建基于微服務(wù)架構(gòu)的應(yīng)用時(shí),SpringBoot提供了一套強(qiáng)大的工具來幫助開發(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)換器,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • Java代碼是如何被CPU狂飆起來的

    Java代碼是如何被CPU狂飆起來的

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

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

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

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

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

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

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

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

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

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

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

最新評論

社会| 来凤县| 遂宁市| 泗洪县| 易门县| 吕梁市| 克什克腾旗| 南靖县| 富民县| 广州市| 上饶县| 永和县| 大化| 资中县| 洛阳市| 萍乡市| 冷水江市| 龙门县| 五台县| 左贡县| 砀山县| 疏附县| 成武县| 曲麻莱县| 元阳县| 耒阳市| 离岛区| 汉寿县| 临澧县| 当雄县| 阳曲县| 云梦县| 丹巴县| 吐鲁番市| 项城市| 丘北县| 汝阳县| 大余县| 鹤峰县| 会昌县| 荆州市|