2017-03-23 28 views
2

我有一個methodC(),它帶有兩個非可選參數,這兩個參數都是從其他兩個名爲before的方法打包並返回的。在調用方法之前檢查兩個可選內容

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

方法C定義的:

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

我不想使用s1Optional.get()和s2Optional.get()作爲參數傳遞到methodC(),因爲它違背了唯一目的使用可選。

我知道,我可以使用

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

擺脫methodC有效的回報(),只有當s1Optional不爲空,但要求​​是,我應該爲s2Optional這樣做。 即,我應該檢查s1Optional和s2Optional以執行methodC。

我明白,它並不總是需要使用可選項,但我只是在玩,想知道這是否可能。

回答

1

我不太確定,如果我正確地理解了你,但我認爲你可以嵌套地圖方法調用來實現你想要的。

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

雖然這看起來很難看。爲什麼不檢查s1Optionals2Optional是否都有第一個值?

if s1Optional.isPresent() && s2Optional.isPresent() { 
    anotherMethod(s1Optional.get(), s2Optional.get()); 
} 
相關問題