有没有办法将 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 可选返回值与在 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")
        );