方法

2017-03-23 3 views
2

を呼び出す前に、2つのoptionals内容をチェックする私が持っている包み、前と呼ばれる他の2つの方法から返され、どちらも二つの非オプションのパラメータを取りmethodC()。方法

Optional<String> s1Optional = methodA(); 
Optional<String> s2Optional = methodB(); 

方法Cの定義:

private Optional<String> methodC(String s1, String s2){ 
    return Optional.ofNullable("abc"); 
} 

それが唯一の目的に反して、私は)(methodCにパラメータとしてs1Optional.get()とs2Optional.get()を使用する必要はありません使用のオプション。 s1Optionalが空でない場合にのみ、

は私が)(私はmethodCから有効なリターンを得るために

s1Optional.map(s1 -> methodC(s1, s2Optional).orElseGet(Optional.get()); 

を使用することができることを知っているが、要件は、私はs2Optionalために同じことを行うべきであるということです。 つまり、methodCを実行するにはs1Optionalとs2Optionalの両方をチェックする必要があります。

私は常にOptionalsを使用する必要はありませんことを理解し、しかし、私はちょうど周りに遊んでいた、これはことも可能であるかどうかを知りたいと思います。

答えて

1

私は私が正しくあなたを理解している場合、非常に分かりませんが、私はあなただけの巣マップ方法は、あなたが望むものを達成するために呼び出すことができると思います。

s1Optional.map(
    s1 -> s2Optional.map(s2 -> methodC(s1, s2).orElse(""))); 

これはかなり醜いです。 s1Optionals2Optionalの両方に最初に値が設定されているかどうかをチェックするのはなぜですか?

if s1Optional.isPresent() && s2Optional.isPresent() { 
    anotherMethod(s1Optional.get(), s2Optional.get()); 
}