Java 8 三个可能的java8可选值-如何干净地返回存在的值?

Java 8 三个可能的java8可选值-如何干净地返回存在的值?,java-8,optional,Java 8,Optional,我有三个java8选项,并希望以首选顺序返回实际存在的选项。似乎应该有一种简单的方法来将它们链接起来: return optionalA.orElseIfPresent(optionalB).orElseIfPresent(optionalC); 如果这三个都是空的,那么应该返回一个可选的.empty() 现有的orElse和OrelGet并不能真正完成任务——它们必须返回一个实际值,因此剩余的回退本身不可能是可选的 在最坏的情况下,我可能会有一长串ifPresent()检查,但似乎有更好的方

我有三个java8选项,并希望以首选顺序返回实际存在的选项。似乎应该有一种简单的方法来将它们链接起来:

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))
        )
    );