有没有一种方法可以将Java8可选返回值与在null上打印消息结合起来?

有没有一种方法可以将Java8可选返回值与在null上打印消息结合起来?,java,java-8,null,optional,Java,Java 8,Null,Optional,我从以下代码开始: String startingValue = getMyValue(); String finishingValue = ""; if (startingValue != null) { finishingValue = startingValue; } else { System.out.println("Value was null"); } 我想使用Java 8选项将其转换为如下内容: Optional<String> startingOp

我从以下代码开始:

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"));
Optional startingOptional=getMyOptional();
字符串结束值=
启动可选
.map(值->值)
.orElse(System.out.println(“未找到值”);

我的问题是:有没有一种方法可以将Java8可选返回值与在null上打印消息结合起来?使用
OrelGet

Optional<String> startingOptional = getMyOptional();
String finishingValue = startingOptional.orElseGet(() -> {
    System.out.println("value not found");
    return "";
});
Optional startingOptional=getMyOptional();
字符串finishingValue=startingOptional.orElseGet(()->{
System.out.println(“未找到值”);
返回“”;
});

使用
.map(value->value)
是无用的:将值转换为自身不会改变任何东西。

如果您使用的是Java 9或更高版本,并且您不想使用默认存根作为空值,而是分别处理空值和非空值,那么您也可以使用
Optional#ifpresentorese(Consumer,Runnable)
方法,其第二个参数是空值的处理程序。 对于您的情况,它看起来像:

Optional startingOptional=getMyOptional();
启动可选
.map(值->值)
.如果存在(
value->{/*用你的值做点什么*/},
()->System.out.println(“未找到值”)
);
或者,输入局部变量:

getMyOptional()
.map(值->值)
.如果存在(
value->{/*用你的值做点什么*/},
()->System.out.println(“未找到值”)
);

ifpresentorese返回void。所以第一个代码片段无法编译。地图操作也没用,我的错误,修正了