我還沒用過java8的一些語法,有點老古董了,記錄下Optional怎么用。?
從源碼看,Optional內部持有一個對象, 有一些api對這個對象進行判空處理。?
靜態方法of ,生成Optional對象, 但這個value不能為空,因為構造器判斷value為空直接拋異常。
如果值可以為空,調用下面的ofNullable方法生成Optional。
常用方法:
1、get方法,value確定非空再調用該方法,可以強制開發處理空值。
2、isPresent、isEmpty方法, 判斷是否有值
3、ifPresent? 值非空時,傳該值執行一個操作。
public void ifPresent(Consumer<? super T> action) {if (this.value != null) {action.accept(this.value);} }
4、ifPresentOrElse方法, 值非空時執行一個操作,否則執行另一個操作
5、filter 方法,判斷值是否滿足一個條件
6、map 方法, 轉化數據。
7、flatMap方法,同map,但會檢查轉化后的數據是否為空,轉化為null會拋異常。
8、當Optional存的值為空,則生成一個Optional(值仍然可能為空)
9、stream方法,生成流
10、orElseGet ,獲取值,值為null則生成一個值
11、 還有空值就拋異常的方法。
支持鏈式調用,可與方法引用配合使用,比較方便,
Optional.ofNullable(user).map(User::getName).filter(name -> !name.isEmpty()).orElse("Unknown");
總結:Optional 主要是對數據進行各種處理,比如空值處理,數據轉化、數據過濾、異常處理等。