2017-04-19 71 views
2

的isPresent代碼,這是條件語句,它可以使用ifPresent來代替它?:如何優化的Java

if (mo.findParameterValueByPath("primaryCRLDP").isPresent() 
    && mo.findParameterValueByPath("secondaryCRLDP").isPresent() 
&& mo.findParameterValueByPath("primaryCRLDP").get().equals(mo.findParameterValueByPath("secondaryCRLDP").get())) { 
return true; 
} 
+0

也許這樣的代碼是爲什麼給我們任選項的人告訴我們主要用它們作爲方法參數的原因之一,而不是返回類型 – GhostCat

+0

@GhostCat看到編輯失敗;) –

+1

是的,手機不是這種活動的理想設備... – GhostCat

回答

2

Optional<T>#ifPresent需要Consumer<? super T>作爲參數,並沒有返回,所以你不會能夠使用它來「優化」上面的代碼。老實說,有沒有什麼可以再說的變量存儲每個Optional<T>做,你不需要調用findParameterValueByPath兩次,每次:

Optional<T> o1 = mo.findParameterValueByPath("primaryCRLDP"); 
Optional<T> o2 = mo.findParameterValueByPath("secondaryCRLDP"); 

return o1.isPresent() && o2.isPresent() && o1.get().equals(o2.get()); 

你並沒有說明具體的泛型類型的Optional<T>用途,所以我在上面的例子中將其留爲通用的。

+1

不錯。簡短,精確的點! – GhostCat

+0

@GhostCat謝謝!我會說沒有更多的事情可以做,但我可能是錯的。 –

+0

實際上,自[Optionals比較其內容](https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html#equals-java.lang.Object-)以來,return語句可以是'return o1.equals(o2);'。 – VGR