2016-06-22 6 views
4

を取得する私はこのようなクラス構造を持っている:オプションフィールド

public class Foo { 
    private FooB foob; 

    public Optional<FooB> getFoob() { 
     return Optional.ofNullable(foob); 
    } 
} 

public class FooB { 
    private int valA; 

    public int getValA() { 
     return valA; 
    } 
} 

私の目標は、fooBのためにgetメソッドを呼び出し、それが存在かどうかを確認することです。それが存在する場合は、valAプロパティを返します。そうでない場合はnullを返します。したがって、これは次のようなものです:

Integer valA = foo.getFoob().ifPresent(getValA()).orElse(null); 

もちろん、これは適切なJava 8オプションの構文ではありませんが、それは私の「擬似コード」です。 1行でJava 8でこれを達成する方法はありますか?

答えて

15

あなたが記述していることmap方法です:

Integer valA = foo.getFoob().map(f -> f.getValA()).orElse(null); 

mapは値が存在する、との値の場合にのみ、オプションの種類を変更する場合は、機能をOptional内の値を変換することができます現在ではない。

マッピング関数からnullを返すこともできます。この場合、結果はOptional.empty()になります。

+8

代わりにメソッド参照を使用するための十分な候補です。 '.map(FooB :: getValA)' –

1

getValueメソッドをクラスFooに追加しない理由は何ですか?これは一種の委任となるでしょう。

public class Foo { 
    ... 
    public Integer getValue() { 
     if (foob == null) { 
      return null; 
     } 
     return foob.getValA(); 
    } 
} 
関連する問題