Java實現Optional優(yōu)雅地判空的使用
前言
Optional類是JDK8引入的一個新類。在這之前,Java在變量、對象、集合的判空處理上并不優(yōu)雅。本篇博客以實際業(yè)務場景為例梳理Optional類在實際業(yè)務場景中如何優(yōu)雅地判空,并不會連篇累牘地介紹Optional類的所有api及用法。
如果你想全面地學習并了解Optional類的用法,以及類里的所有api,麻煩移步其他博客。
場景一、
當需要對變量判空,如果為空則設置默認值;
當需要對對象或集合判空,如果為空則新建;
// 比如有一個String類型的變量str,需要對其判空,如果為空則設置為空字符串
// 這個場景十分普遍。就是當從數據庫請求到數據后,需要封裝后返回給前端,這時對字段就需要做判空處理。
String str = Optional.ofNullable(str).orElse(Strings.EMPTY);
// 比如有一個ArrayList類型的變量strList,需要對其判空,如果為空則new一個ArrayList
List<String> newList = Optional.ofNullable(strList).orElse(new ArrayList<>());
// 這時如果需求變了,如果為空則new一個有默認值的ArrayList,則可以寫成如下:
List<String> newList2 = Optional.ofNullable(strList).orElseGet(()->{
List<String> strList2 = new ArrayList<>();
strList2.add("1");
strList2.add("2");
strList2.add("3");
return strList2;
});
// 這時我們發(fā)現這樣的寫法可讀性太差,不優(yōu)雅,則可以把lambda表達式中的這段代碼抽離成獨立的方法,寫成如下:
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;
}
// 這時,如果發(fā)現其實new出來的這個新的ArrayList后續(xù)不需要做增刪操作,只用于讀操作,那么又可以簡化成如下:
List<String> newList4 = Optional.ofNullable(strList).orElse(Arrays.asList("1", "2", "3"));場景二、
對變量判空后,如果變量有值,需要做其他的業(yè)務處理;
// 比如有一個String類型的變量str,需要對其判空,如果非空則將該變量放入一個ArrayList中,則可以寫成如下: List<String> strList = new ArrayList<>(); Optional.ofNullable(str).ifPresent(e-> strList.add(e)); // 這里,上面的代碼其實也可以用lambda表達式中的“方法引用”方式簡寫成如下: Optional.ofNullable(str).ifPresent(strList::add);
場景三、
對對象判空后,如果對象有值,需要提取該對象中的屬性值;
// 如下場景就是對user對象判空,如果user不為空,則取出user對象的username字段值 User user = new User(); String userName = Optional.ofNullable(user).map(e -> user.getUsername()).orElse(Strings.EMPTY); // 同理,上面的代碼也可以用lambda表達式中的“方法引用”方式簡寫 String userName = Optional.ofNullable(user).map(User::getUsername).orElse(Strings.EMPTY);
到此這篇關于Java實現Optional優(yōu)雅地判空的使用的文章就介紹到這了,更多相關Java Optional判空內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java?spring?通過注解方式創(chuàng)建對象的示例詳解
這篇文章主要介紹了java?spring?通過注解方式創(chuàng)建對象,本文結合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-02-02
springboot實現jar運行復制resources文件到指定的目錄(思路詳解)
這篇文章主要介紹了springboot實現jar運行復制resources文件到指定的目錄,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04

