有没有一种方法可以将返回转换值的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);
}
}