2016-04-09 1 views
3

私は3つのjava8オプションを持っていて、どれが実際に優先順序で存在していても返したいと思います。そのようにそれらをチェーンに簡単な方法があるべきように思え:3つのすべてが空の場合3つの可能なjava8オプション値 - どれが存在するかをきれいに返すにはどうすればよいですか?

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

、その後、Optional.empty()が返されるべきです。

既存のorElseとorElseGetは実際にはタスクに依存しません。実際の値を返さなければならないため、残りの代替がオプション自体であることはできません。

最悪の場合、私はifPresent()チェックの長いリストを持つことができますが、それについてはもっと良い方法があるようです。

答えて

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

私はJB Nizetの答えが好きです。インデント/括弧の狂気に陥る

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

をし、私は個人的に好きではない:また、のみOptional(何らかの理由で)使用。

+1

ストリームの回答が「もっときれい」かもしれませんが、このソリューションは簡単で透明です(さらに、効率的です)。 –

関連する問題