欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

 更新時(shí)間:2025年07月10日 09:54:03   作者:鄧不利東  
本文介紹了Java8的Optional類如何在實(shí)際業(yè)務(wù)中用于更優(yōu)雅地處理變量和對(duì)象的判空問題,包括設(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,則可以寫成如下:
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ù)不需要做增刪操作,只用于讀操作,那么又可以簡(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中,則可以寫成如下:
List<String> strList = new ArrayList<>();
Optional.ofNullable(str).ifPresent(e-> strList.add(e));
 
// 這里,上面的代碼其實(shí)也可以用lambda表達(dá)式中的“方法引用”方式簡(jiǎn)寫成如下:
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)寫
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)文章

  • IDEA一鍵部署SpringBoot項(xiàng)目到服務(wù)器的教程圖解

    IDEA一鍵部署SpringBoot項(xiàng)目到服務(wù)器的教程圖解

    本文通過圖文并茂的形式給大家介紹IDEA一鍵部署SpringBoot項(xiàng)目到服務(wù)器的教程,非常不錯(cuò),給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2022-02-02
  • Java通過JavaMail發(fā)送郵件功能

    Java通過JavaMail發(fā)送郵件功能

    這篇文章主要為大家詳細(xì)介紹了Java通過JavaMail發(fā)送郵件功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Java解壓和壓縮帶密碼的zip文件過程詳解

    Java解壓和壓縮帶密碼的zip文件過程詳解

    這篇文章主要介紹了Java解壓和壓縮帶密碼的zip文件,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,下面我們來學(xué)習(xí)一下吧
    2019-06-06
  • java參數(shù)傳遞之值傳遞和引用傳遞

    java參數(shù)傳遞之值傳遞和引用傳遞

    這篇文章主要介紹了java參數(shù)傳遞之值傳遞和引用傳遞,引用了兩個(gè)代碼實(shí)例來講解,有感興趣的同學(xué)可以研究下
    2021-02-02
  • Java?Lombok實(shí)現(xiàn)手機(jī)號(hào)碼校驗(yàn)的示例代碼

    Java?Lombok實(shí)現(xiàn)手機(jī)號(hào)碼校驗(yàn)的示例代碼

    手機(jī)號(hào)碼校驗(yàn)通常是系統(tǒng)開發(fā)中最基礎(chǔ)的功能之一,本文主要介紹了Java?Lombok實(shí)現(xiàn)手機(jī)號(hào)碼校驗(yàn)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java實(shí)現(xiàn)多人聊天室(含界面)

    Java實(shí)現(xiàn)多人聊天室(含界面)

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)多人聊天室,包含界面,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Java?spring?通過注解方式創(chuàng)建對(duì)象的示例詳解

    Java?spring?通過注解方式創(chuàng)建對(duì)象的示例詳解

    這篇文章主要介紹了java?spring?通過注解方式創(chuàng)建對(duì)象,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-02-02
  • 詳解Java8?StreamAPI中的map()方法

    詳解Java8?StreamAPI中的map()方法

    Stream?API?是Java8中新加入的功能,這篇文章主要帶大家了解一下?Stream?API?中的?map()?方法的使用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-04-04
  • springboot實(shí)現(xiàn)jar運(yùn)行復(fù)制resources文件到指定的目錄(思路詳解)

    springboot實(shí)現(xiàn)jar運(yùn)行復(fù)制resources文件到指定的目錄(思路詳解)

    這篇文章主要介紹了springboot實(shí)現(xiàn)jar運(yùn)行復(fù)制resources文件到指定的目錄,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-04-04
  • RSA加密的方式和解密方式實(shí)現(xiàn)方法(推薦)

    RSA加密的方式和解密方式實(shí)現(xiàn)方法(推薦)

    下面小編就為大家?guī)硪黄猂SA加密的方式和解密方式實(shí)現(xiàn)方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-06-06

最新評(píng)論