Optional 常用方法總結(jié)
Optional 常用的方法總結(jié):
-
empty : 創(chuàng)建一個(gè)空的Optional對(duì)象
-
of:為非null的值創(chuàng)建一個(gè)Optional。of方法通過工廠方法創(chuàng)建Optional類。需要注意的是,創(chuàng)建對(duì)象時(shí)傳入的參數(shù)不能為null。如果傳入?yún)?shù)為null,則拋出NullPointerException。因此不經(jīng)常用。
-
ofNullable:為指定的值創(chuàng)建一個(gè)Optional,如果指定的值為null,則返回一個(gè)空的Optional。
-
isPresent: 檢查一個(gè)Optional對(duì)象中是否有值,只有值非空才返回truex,否則返回false。
-
ifPresent:如果Optional實(shí)例有值則為其調(diào)用consumer,否則不做處理
-
get:如果Optional有值則將其返回,否則拋出NoSuchElementException。因此也不經(jīng)常用。
-
orElse:如果有值則將其返回,否則返回指定的其它值。經(jīng)常用于判斷返回默認(rèn)值的場(chǎng)景;
-
orElseGet:orElseGet與orElse方法類似,區(qū)別在于得到的默認(rèn)值。orElse方法將傳入的字符串作為默認(rèn)值,orElseGet方法可以接受Supplier接口的實(shí)現(xiàn)用來生成默認(rèn)值
-
orElseThrow:如果有值則將其返回,否則拋出supplier接口創(chuàng)建的異常。
-
filter: 接收一個(gè)函數(shù)式接口 ,如果有值并且滿足斷言條件返回包含該值的Optional,否則返回空Optional。
-
map:如果有值,則對(duì)其執(zhí)行調(diào)用mapping函數(shù)得到返回值。如果返回值不為null,則創(chuàng)建包含mapping返回值的Optional作為map方法返回值,否則返回空Optional。
-
flatMap:如果有值,為其執(zhí)行mapping函數(shù)返回Optional類型返回值,否則返回空Optional。
通過示例查看 optional 帶來的好處
示例一:
根據(jù)用戶的對(duì)象獲取用戶的名稱,如果存在則返回用戶名稱,沒有則返回 unknown ;沒有使用 Option 的 Java 實(shí)現(xiàn)代碼如下:

沒有使用Optional 時(shí),需要不斷的判斷是否為空,降低了代碼的可讀性和維護(hù)性,使用 Optional 之后,代碼如下:

使用Optional 之后,通過一行便完成了 上述的功能,減少了層層的 if 判斷
示例 二:
從一批學(xué)生中,選出年齡大于等于18,參加過考試并且成績(jī)大于80的人去參加比賽。
