轉自:
http://www.java265.com/JavaCourse/202206/3665.html
Optional 是一個物件容器,具有以下兩個特點:
提示用戶要注意該物件有可能為null
簡化if else代碼
1. 創建:
Optional.empty(): 創建一個空的 Optional 實體
Optional.of(T t):創建一個 Optional 實體,當 t為null時拋出例外
Optional.ofNullable(T t):創建一個 Optional 實體,但當 t為null時不會拋出例外,而是回傳一個空的實體
2. 獲取:
get():獲取optional實體中的物件,當optional 容器為空時報錯
3. 判斷:
isPresent():判斷optional是否為空,如果空則回傳false,否則回傳true
ifPresent(Consumer c):如果optional不為空,則將optional中的物件傳給Comsumer函式
orElse(T other):如果optional不為空,則回傳optional中的物件;如果為null,則回傳 other 這個默認值
orElseGet(Supplier<T> other):如果optional不為空,則回傳optional中的物件;如果為null,則使用Supplier函式生成默認值other
orElseThrow(Supplier<X> exception):如果optional不為空,則回傳optional中的物件;如果為null,則拋出Supplier函式生成的例外
4. 過濾:
filter(Predicate<T> p):如果optional不為空,則執行斷言函式p,如果p的結果為true,則回傳原本的optional,否則回傳空的optional
5. 映射:
map(Function<T, U> mapper):如果optional不為空,則將optional中的物件 t 映射成另外一個物件 u,并將 u 存放到一個新的optional容器中,
flatMap(Function< T,Optional<U>> mapper):跟上面一樣,在optional不為空的情況下,將物件t映射成另外一個optional
區別:map會自動將u放到optional中,而flatMap則需要手動給u創建一個optional
下文筆者將講述Optional之orElse()注意事項 例:
return Optional.ofNullable(service.T1()).orElse(service.T2())
以上代碼運行效果為:當service.T1()回傳null時,則此時會回傳service.T2()
-----------------------------------------------------------------------------
但是通過測驗,我們發現當service.T1() not null時,
orElse中的代碼也會運行,這就是一個大問題,也并不是我們想要的
但是當我們使用orElseGet()方法,則service.T1() not null時,則orElseGet()中的方法不會運行
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/499604.html
標籤:Java
上一篇:java中Files.mismatch方法具有什么功能呢?
下一篇:陣列
