簡體   English   中英

有沒有辦法將 Java8 Optional 返回值與在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM