官术网_书友最值得收藏!

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。

主站蜘蛛池模板: 泾阳县| 巴塘县| 清徐县| 红原县| 汶上县| 北票市| 阳朔县| 晋城| 新竹县| 西乌| 汉沽区| 天镇县| 威远县| 曲松县| 潮安县| 东宁县| 曲沃县| 渝中区| 大兴区| 大厂| 浦北县| 乌兰察布市| 卓资县| 辉县市| 赤峰市| 阿坝县| 西盟| 开封县| 道真| 泌阳县| 大埔区| 句容市| 阜宁县| 文化| 南丹县| 彭水| 大荔县| 远安县| 五台县| 海口市| 稷山县|