3 回答

TA貢獻1891條經(jīng)驗 獲得超3個贊
map不起作用,因為既沒有method1也method2沒有返回值。并且void不允許映射到。
目前在 Java 8 中沒有真正巧妙的解決方案,但如果您碰巧使用 Java 9,您可以通過ifPresentOrElse(Consumer<T>, Runnable>)以下方式實現(xiàn):
filterValue.ifPresentOrElse(value -> {
if(value){
method1();
} else {
method2();
}
}, () -> method3());

TA貢獻1815條經(jīng)驗 獲得超13個贊
這將映射Optional到方法的返回值:
filterValue.map(o -> o.TRUE ? method1() : method2()).orElse(method3());
這不是你想要的,而且只有當方法返回一些東西并且它們之間兼容時它才會編譯。
雖然這無法編譯,因為isPresent()它不接受任何參數(shù)但返回一個boolean:
filterValue.isPresent(filterValue.get().TRUE ? method1() : method2());
老派方式是滿足您要求的方式。
Optional被引入以防止NullPointerException。
在某些特定情況下,當您想將 映射Optional到另一件事時,它會省去條件語句: Foo foo = Optional.map(..).map(...).get();。
但是你不是在這個配置中:你想根據(jù) 3 個不同的狀態(tài)來調(diào)用一個不同的方法Optional:存在和真、存在和假、不存在。
Optional不要提供直接的方法來執(zhí)行這樣的邏輯。
通過降低嵌套級別,您的代碼可以更具可讀性:
if (filterValue.isPresent() && filterValue.get()) {
method1();
} else if (filterValue.isPresent()) {
method2();
} else {
method3();
}
添加回答
舉報