![](/img/trans.png)
[英]Is there a way to combine Java8 Optional returning a transformed value with printing a message on null?
[英]Is there a way to combine Java8 Optional returning a value with printing a message on null?
我從這個代碼開始:
String startingValue = getMyValue();
String finishingValue = "";
if (startingValue != null) {
finishingValue = startingValue;
} else {
System.out.println("Value was null");
}
我想使用 Java 8 選項將它轉換為這樣的:
Optional<String> startingOptional = getMyOptional();
String finishingValue =
startingOptional
.map(value -> value)
.orElse(System.out.println("value not found"));
我的問題是:有沒有辦法將 Java8 Optional 返回值與在 null 上打印消息結合起來?
使用orElseGet
:
Optional<String> startingOptional = getMyOptional();
String finishingValue = startingOptional.orElseGet(() -> {
System.out.println("value not found");
return "";
});
使用.map(value -> value)
是沒有用的:將一個值轉換成它自己不會改變任何東西。
如果您使用的是 Java 9 或更高版本,並且您不想對空值使用默認存根而是分別處理空和非空情況,您還可以使用Optional#ifPresentOrElse(Consumer, Runnable)
方法,其第二個參數是空值的處理程序。 對於您的情況,它看起來像:
Optional<String> startingOptional = getMyOptional();
startingOptional
.map(value -> value)
.ifPresentOrElse(
value -> {/* do something with your value */},
() -> System.out.println("value not found")
);
或者,省略局部變量:
getMyOptional()
.map(value -> value)
.ifPresentOrElse(
value -> {/* do something with your value */},
() -> System.out.println("value not found")
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.