Java實(shí)現(xiàn)Optional優(yōu)雅地判空的使用
前言
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)景一、
當(dāng)需要對(duì)變量判空,如果為空則設(shè)置默認(rèn)值;
當(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)景二、
對(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)景三、
對(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),本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09
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)換器,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04
Java中使用正則表達(dá)式獲取網(wǎng)頁(yè)中所有圖片的路徑
這篇文章主要介紹了Java中使用正則表達(dá)式獲取網(wǎng)頁(yè)中所有圖片的路徑,本文直接給出實(shí)例代碼,需要的朋友可以參考下2015-06-06
Java格式化小數(shù)并保留兩位小數(shù)的四種方法
Java中格式化小數(shù)并保留兩位小數(shù)的四種方法:使用DecimalFormat、String.format()、BigDecimal和NumberFormat,每種方法都有其適用場(chǎng)景和特點(diǎn),文章通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03
基于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),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11

