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,則可以寫成如下: 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)景二、
對(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)景三、
對(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ù)器的教程,非常不錯(cuò),給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2022-02-02Java?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-07Java?spring?通過注解方式創(chuàng)建對(duì)象的示例詳解
這篇文章主要介紹了java?spring?通過注解方式創(chuàng)建對(duì)象,本文結(jié)合示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-02-02springboot實(shí)現(xiàn)jar運(yùn)行復(fù)制resources文件到指定的目錄(思路詳解)
這篇文章主要介紹了springboot實(shí)現(xiàn)jar運(yùn)行復(fù)制resources文件到指定的目錄,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-04-04RSA加密的方式和解密方式實(shí)現(xiàn)方法(推薦)
下面小編就為大家?guī)硪黄猂SA加密的方式和解密方式實(shí)現(xiàn)方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-06-06