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

有没有一种方法可以将返回转换值的Java8 Optional与在null上打印消息结合起来?,java,java-8,null,optional,Java,Java 8,Null,Optional,我从以下代码开始: String startingValue = getMyValue(); List<String finishingValue = new ArrayList; if (startingValue != null) { finishingValue = Arrays.asList(startingValue.split()); } else { System.out.println("Value was null"); } String startin

我从以下代码开始:

String startingValue = getMyValue();
List<String finishingValue = new ArrayList;
if (startingValue != null) {
    finishingValue = Arrays.asList(startingValue.split());
} else {
    System.out.println("Value was null");
}
String startingValue=getMyValue();
列表数组.asList(value.split(“,”))
.orElseGet(()->{
System.out.println(“未找到值”);
返回“”;
});
现在我可以这样做了,但这并不能让事情变得更简单

    Optional<String> startingValue = getMyValue();
    String finishingValue = startingValue
            .orElseGet(() -> {
        System.out.println("value not found");
        return "";
    });
    List<String> finishingValueList = new ArrayList();
    if (startingValue.isPresent()) {
        finishingValueArray = startingValue.get().split(",");
        finishingValueList = Arrays.asList(finishingValueArray);
    }
Optional startingValue=getMyValue();
字符串结束值=起始值
.orElseGet(()->{
System.out.println(“未找到值”);
返回“”;
});
List finishingValueList=新的ArrayList();
if(startingValue.isPresent()){
finishingValueArray=startingValue.get().split(“,”);
finishingValueList=Arrays.asList(finishingValueArray);
}
我的问题是:有没有一种方法可以将Java8可选返回值与在null上打印消息结合起来?


请注意,这与我在value is present案例中进行的附加转换不同

我希望,这对你有用

String startingValue = getMyValue();
return Optional.ofNullable(startingValue)
               .map(value ->Arrays.asList(startingValue.split(",")))
               .orElseGet(()->{
                   System.out.println("Value was null");
                   return null;
                }); 
正如@Deadpool(伟大的名字!)所建议的:

import java.util.*;
班级操场{
公共静态void main(字符串[]args){
Optional startingOptional=Optional.ofNullable(null);
列出finishingValue=
启动可选
.map(值->数组.asList(值.split(“,”))
.orElseGet(()->{
System.out.println(“未找到值”);
返回新的ArrayList();
});
System.out.println(“finishingValue:+finishingValue”);
}
}

orElseGet
中返回空的
List
而不是字符串,如
newarraylist()
使用
Optional
更合适的方法是使用
orElseGet
返回一个空列表,并检查列表是否为空以触发消息(不需要返回null,而
Optional
是为避免此情况而设计的)或者使用
orelsetrow
来指示问题的存在。注意:不能像在上一个代码块中那样对字符串类型执行
startingValue.orElseGet
。此外,对于此类用例,更好的设计是将
getMyValue()
的返回类型更改为跟随签名
可选getMyValue()
。否则,您的第一个代码块就足以处理
null
。谢谢@Naman-这很有帮助,我已经更新了它。如果返回值没有变化,您可以使用
Collections.emptyList()
而不是
new arraryList()
String startingValue = getMyValue();
return Optional.ofNullable(startingValue)
               .map(value ->Arrays.asList(startingValue.split(",")))
               .orElseGet(()->{
                   System.out.println("Value was null");
                   return null;
                }); 
import java.util.*;

class Playground {
    public static void main(String[ ] args) {
        Optional<String> startingOptional = Optional.ofNullable(null);
        List<String> finishingValue =
                startingOptional
                    .map(value -> Arrays.asList(value.split(",")))
                    .orElseGet(() -> {
                        System.out.println("value not found"); 
                        return new ArrayList<String>();
                    });
        System.out.println("finishingValue: " + finishingValue);
    }
}