首頁 >Java >java教程 >在 Java 中什麼時候應該使用Optional.orElseGet()而不是Optional.orElse()?

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

Barbara Streisand
Barbara Streisand原創
2024-10-26 09:27:30730瀏覽

When should I use Optional.orElseGet() instead of Optional.orElse() in Java?

確定Optional.orElse()和Optional.orElseGet()之間的區別

在Java中,Optional類別提供了像orElse ( ) 和orElseGet() 用於處理潛在的缺失值或空值。了解它們的細微差別對於有效使用至關重要。

orElse() 與orElseGet()

  • orElse():傳回如果存在,則傳回值,如果不存在,則傳回提供的預設值。
  • orElseGet():如果存在,則傳回值,如果不存在,則傳回呼叫提供的供應商的結果。如果該值存在,則不會呼叫供應商。

何時使用orElseGet()

  • 效能最佳化:當對缺失值執行的操作計算成本較高時,請考慮使用orElseGet(),因為它可以避免在isPresent() 場景中不必要的執行。

真實世界函數範例

為了說明差異,請考慮以下函數:

<code class="java">public Optional<String> findMyPhone(int phoneId)</code>

場景1:1:orElse ()

當可選.isPresent() 時== true:

  • orElse() 將冗餘呼叫後續函數,即使該值已經存在。

當 optional.isPresent() == false 時:

  • orElse() 無論是否必要都會呼叫後續函數。

場景2:orElseGet()

當option.isPresent() == true:

  • orElseet(會呼叫供應商,因為該值存在。

當 option.isPresent() == false 時:

  • orElseGet() 將呼叫供應商產生預設值。

程式碼範例

<code class="java">public class TestOptional {
    public Optional<String> findMyPhone(int phoneId) {
        return phoneId == 10
                ? Optional.of("MyCheapPhone")
                : Optional.empty();
    }

    public String buyNewExpensivePhone() {
        System.out.println("Going to a very far store to buy a new expensive phone");
        return "NewExpensivePhone";
    }

    public static void main(String[] args) {
        // Scenario 1: orElse()
        Optional<String> phone = findMyPhone(10).orElse(buyNewExpensivePhone());
        // Scenario 2: orElseGet()
        phone = findMyPhone(-1).orElseGet(() -> buyNewExpensivePhone());
    }
}</code>

The程式碼示範了 orElse() 和 orElseGet() 根據選用值是否存在的不同行為。

以上是在 Java 中什麼時候應該使用Optional.orElseGet()而不是Optional.orElse()?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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