java之Optional
ofNullable
- 使用靜態(tài)方法 ofNullable() 創(chuàng)建一個(gè)即可空又可非空的 Optional 對(duì)象
String name = null;
Optional<String> optOrNull = Optional.ofNullable(name);
System.out.println(optOrNull); // 輸出:Optional.empty
of
- 使用靜態(tài)方法 of() 創(chuàng)建一個(gè)非空的 Optional 對(duì)象
- 傳遞給 of() 方法的參數(shù)必須是非空的,也就是說不能為 null,否則仍然會(huì)拋出 NullPointerException。
isPresent
- isPresent() 判斷一個(gè) Optional 對(duì)象是否存在,如果存在,該方法返回 true,否則返回 false
- Java 11 后還可以通過方法 isEmpty() 判斷與 isPresent() 相反的結(jié)果
ifPresent
- 如果沒有該方法的話,我們通常需要先通過 isPresent() 方法對(duì) Optional 對(duì)象進(jìn)行判空后再執(zhí)行相應(yīng)的代碼:
Optional<String> opt = Optional.of("沉默王二");
opt.ifPresent(str -> System.out.println(str.length()));
orElse 和 orElseGet
- orElse() 方法用于返回包裹在 Optional 對(duì)象中的值,如果該值不為 null,則返回;否則返回默認(rèn)值
- orElseGet() 方法與 orElse() 方法類似,但參數(shù)類型不同。如果 Optional 對(duì)象中的值為 null,則執(zhí)行參數(shù)中的函數(shù)
String nullName = null;
String name = Optional.ofNullable(nullName).orElse("沉默王二");
filter(過濾值) 和 map(轉(zhuǎn)換值)
- filter() 方法的參數(shù)類型為 Predicate(Java 8 新增的一個(gè)函數(shù)式接口),也就是說可以將一個(gè) Lambda 表達(dá)式傳遞給該方法作為條件,如果表達(dá)式的結(jié)果為 false,則返回一個(gè) EMPTY 的 Optional 對(duì)象,否則返回過濾后的 Optional 對(duì)象。
public class OptionalMapFilterDemo {
public static void main(String[] args) {
String password = "password";
Optional<String> opt = Optional.ofNullable(password);
Predicate<String> len6 = pwd -> pwd.length() > 6;
Predicate<String> len10 = pwd -> pwd.length() < 10;
Predicate<String> eq = pwd -> pwd.equals("password");
boolean result = opt.map(String::toLowerCase).filter(len6.and(len10 ).and(eq)).isPresent();
System.out.println(result);
}
}
世界上沒有什么事情是跑步解決不了的,如果有,那就再跑一會(huì)!

浙公網(wǎng)安備 33010602011771號(hào)