首頁  >  文章  >  Java  >  什麼時候應該使用Optional.orElseGet()而不是Optional.orElse()?

什麼時候應該使用Optional.orElseGet()而不是Optional.orElse()?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-11-02 09:38:31721瀏覽

 When Should I Use Optional.orElseGet() Instead of Optional.orElse()?

理解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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn