Java 8 三个可能的java8可选值-如何干净地返回存在的值?
我有三个java8选项,并希望以首选顺序返回实际存在的选项。似乎应该有一种简单的方法来将它们链接起来:Java 8 三个可能的java8可选值-如何干净地返回存在的值?,java-8,optional,Java 8,Optional,我有三个java8选项,并希望以首选顺序返回实际存在的选项。似乎应该有一种简单的方法来将它们链接起来: return optionalA.orElseIfPresent(optionalB).orElseIfPresent(optionalC); 如果这三个都是空的,那么应该返回一个可选的.empty() 现有的orElse和OrelGet并不能真正完成任务——它们必须返回一个实际值,因此剩余的回退本身不可能是可选的 在最坏的情况下,我可能会有一长串ifPresent()检查,但似乎有更好的方
return optionalA.orElseIfPresent(optionalB).orElseIfPresent(optionalC);
如果这三个都是空的,那么应该返回一个可选的.empty()
现有的orElse和OrelGet并不能真正完成任务——它们必须返回一个实际值,因此剩余的回退本身不可能是可选的
在最坏的情况下,我可能会有一长串ifPresent()检查,但似乎有更好的方法来执行它?我喜欢JB Nizet的答案(也得到了更高的票数)。或者,仅使用可选(无论出于何种原因):
return Stream.of(optional1, optional2, optional3)
.filter(Optional::isPresent)
.map(Optional::get)
.findFirst();
这属于缩进/括号疯狂,我个人不喜欢。流式回答可能更“漂亮”,但这个解决方案更简单、更透明(顺便说一句,效率更高)
Optional.ofNullable(
optionalA.orElse(
optionalB.orElse(
optionalC.orElse(null))
)
);