2016-04-09 13 views
3

我有三個java8選項,並且希望返回以優先順序實際存在的選項。好像應該有一個簡單的方法來把它們連像這樣:三種可能的java8可選值 - 如何幹淨地返回兩者中的任何一個?

return optionalA.orElseIfPresent(optionalB).orElseIfPresent(optionalC); 

如果三個都是空的,那麼Optional.empty()應該歸還。

現有的orElse和orElseGet並不是真正的任務 - 它們必須返回一個實際值,所以剩下的回退不可能是Optionals本身。

在最糟糕的情況下,我可以有一個ifPresent()檢查的長列表,但似乎有更好的方法去解決它?

回答

7
return Stream.of(optional1, optional2, optional3) 
      .filter(Optional::isPresent) 
      .map(Optional::get) 
      .findFirst(); 
4

我喜歡JB Nizet的回答(upvoted以及)。另外,只用Optional(無論何種原因):

Optional.ofNullable(
    optionalA.orElse(
     optionalB.orElse(
      optionalC.orElse(null)) 
     ) 
    ); 

其落入壓痕/括號瘋狂,我個人不喜歡。

+1

流答案可能更「漂亮」,但這種解決方案更簡單,更透明(並且順便提一下,效率更高。) –

相關問題