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

Nat*_*han 3 optional java-8

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

return optionalA.orElseIfPresent(optionalB).orElseIfPresent(optionalC);
Run Code Online (Sandbox Code Playgroud)

如果这三个都是空的,则Optional.empty()应该返回.

现有的orElse和orElseGet并没有真正完成任务 - 它们必须返回一个实际值,因此剩下的后备不可能是Optionals本身.

在最糟糕的情况下,我可以有一长串ifPresent()检查,但似乎有一个更好的方法去实现它?

JB *_*zet 7

return Stream.of(optional1, optional2, optional3)
             .filter(Optional::isPresent)
             .map(Optional::get)
             .findFirst();
Run Code Online (Sandbox Code Playgroud)