- Java核心技術(shù)·卷Ⅱ:高級特性(原書第10版)
- (美)凱S.霍斯特曼
- 599字
- 2020-10-30 18:10:34
1.7.1 如何使用Optional值
有效地使用Optional的關(guān)鍵是要使用這樣的方法:它在值不存在的情況下會產(chǎn)生一個可替代物,而只有在值存在的情況下才會使用這個值。
讓我們來看看第一條策略。通常,在沒有任何匹配時,我們會希望使用某種默認(rèn)值,可能是空字符串:

你還可以調(diào)用代碼來計(jì)算默認(rèn)值:

或者可以在沒有任何值時拋出異常:

你剛剛看到了如何在不存在任何值的情況下產(chǎn)生相應(yīng)的替代物。另一條使用可選值的策略是只有在其存在的情況下才消費(fèi)該值。
ifPresent方法會接受一個函數(shù)。如果該可選值存在,那么它會被傳遞給該函數(shù)。否則,不會發(fā)生任何事情。

例如,如果在該值存在的情況下想要將其添加到某個集中,那么就可以調(diào)用

或者直接調(diào)用

當(dāng)調(diào)用ifPresent時,從該函數(shù)不會返回任何值。如果想要處理函數(shù)的結(jié)果,應(yīng)該使用map:

現(xiàn)在added具有三種值之一:在optionalValue存在的情況下包裝在Optional中的true或false,以及在optionalValue不存在的情況下的空Optional。
注意:這個map方法與1.3節(jié)中描述的Stream接口的map方法類似。你可以直接將可選值想象成尺寸為0或1的流。結(jié)果的尺寸也是0或1,并且在后一種情況中,會應(yīng)用到函數(shù)。
java.util.Optional 8
·T orElse(T other)
產(chǎn)生這個Optional的值,或者在該Optional為空時,產(chǎn)生other。
·T orElseGet(Supplier<?extends T>other)
產(chǎn)生這個Optional的值,或者在該Optional為空時,產(chǎn)生調(diào)用other的結(jié)果。
·T orElseThrow(Supplier<?extends X>exceptionSupplier)
產(chǎn)生這個Optional的值,或者在該Optional為空時,拋出調(diào)用exceptionSupplier的結(jié)果。
·void ifPresent(Consumer<?super T>consumer)
如果該Optional不為空,那么就將它的值傳遞給consumer。
·<U>Optional<U>map(Function<?super T,?extends U>mapper)
產(chǎn)生將該Optional的值傳遞給mapper后的結(jié)果,只要這個Optional不為空且結(jié)果不為null,否則產(chǎn)生一個空Optional。
- DBA攻堅(jiān)指南:左手Oracle,右手MySQL
- 程序員面試筆試寶典(第3版)
- OpenDaylight Cookbook
- 觸·心:DT時代的大數(shù)據(jù)精準(zhǔn)營銷
- 算法精粹:經(jīng)典計(jì)算機(jī)科學(xué)問題的Java實(shí)現(xiàn)
- 匯編語言程序設(shè)計(jì)(第2版)
- Java性能權(quán)威指南(第2版)
- Python數(shù)據(jù)可視化之Matplotlib與Pyecharts實(shí)戰(zhàn)
- 嚴(yán)密系統(tǒng)設(shè)計(jì):方法、趨勢與挑戰(zhàn)
- 用戶體驗(yàn)增長:數(shù)字化·智能化·綠色化
- Learning Apache Cassandra
- Android移動應(yīng)用項(xiàng)目化教程
- Microsoft Exchange Server 2016 PowerShell Cookbook(Fourth Edition)
- SAP Web Dynpro for ABAP開發(fā)技術(shù)詳解:基礎(chǔ)應(yīng)用
- 軟硬件綜合系統(tǒng)軟件需求建模及可靠性綜合試驗(yàn)、分析、評價(jià)技術(shù)