理解Optional.orElse()和Optional.orElseGet()之間的區別
Optional.orElse()和Optional.orElseGet( ) Java 中的兩個方法有助於處理Optional,一個可能包含或不包含值的容器物件。
orElse() 的說明
orElse() 採用一個值(其他)作為參數。如果Optional存在(包含一個值),它會傳回該值。但是,如果Optional為空,它將傳回提供的值(其他)。
orElseGet()的描述
orElseGet()也接受一個參數,但是這個現在是供應商功能介面了。供應商不接受任何參數並傳回一個值。與orElse()不同,orElseGet()只會在Optional為空時呼叫Supplier函數。
什麼時候使用orElseGet()?
orElse的主要差異() 和 orElseGet() 是指提供的參數會導致昂貴的操作。如果Optional不為空,使用orElse()仍然會執行提供的操作,即使它是不必要的。然而,orElseGet() 避免了這種不必要的操作,只在需要時執行它。
範例
考慮以下範例:
<code class="java">Optional<String> myString = Optional.empty(); String result1 = myString.orElse(ExpensiveOperation.getExpensiveString()); // ExpensiveOperation always executed String result2 = myString.orElseGet(() -> ExpensiveOperation.getExpensiveString()); // ExpensiveOperation only executed if Optional is empty</code>
測試案例
測試案例<code class="java">public Optional<String> findMyPhone(int phoneId) { ... }</code>
測試案例
Optional.isPresent() | Used phone |
---|---|
True (redundant call) | NewExpensivePhone |
False | NewExpensivePhone |
測試案例請考慮一個傳回可選字串的函數:
Optional.isPresent() | Used phone |
---|---|
True | MyCheapPhone |
False | NewExpensivePhone |
場景1:orElse()
場景2:orElseGet() 如測試案例所示,orElse() 總是執行提供的函數,而orElseGet() 只執行結論理解orElse() 和orElseGet() 之間的差異在使用可選值時至關重要。 orElseGet() 提供了一種處理Optional值的有效方法,避免了Optional存在時不必要的操作。
以上是什麼時候應該使用Optional.orElseGet()而不是Optional.orElse()?的詳細內容。更多資訊請關注PHP中文網其他相關文章!