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

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

Linda Hamilton
發布: 2024-10-26 22:47:31
原創
543 人瀏覽過

When should you use Optional.orElseGet() instead of Optional.orElse()?

Optional.orElse() 和Optional.orElseGet() 的區別

Optional 類別提供了orElse(>

    Optional 類別提供了orElse() 和Elseet()從Optional中檢索值(如果存在),或提供預設值(如果為空)。然而,它們的行為有一個微妙的區別:
  • orElse():
  • 始終調用提供的函數來獲取預設值,無論Optional是否包含值或不是。
  • orElseGet():
僅當Optional 為​​空時才呼叫提供的函數。

何時使用orElseGet()

關鍵差異在於orElseGet() 延遲預設值擷取函數的執行,直到需要時才執行,而orElse( ) 始終執行該函數。在取得預設值是一項昂貴或耗時的操作且您只想在必要時執行的情況下,這可能很重要。

範例:

<code class="java">Optional<Resource> resource = findResource();
Resource result = orElseGet(() -> getExpensiveDefaultValue());</code>
登入後複製
考慮您需要尋找資源(由Optional表示)並擷取其值,或提供預設值的場景。如果取得預設值需要昂貴​​的資料庫查詢,則您需要使用 orElseGet() 來避免在資源存在時進行查詢。

附加說明:
  • orElseGet() 接收一個Supplier 介面實現,這是一個代表無參數函數的函數式介面。
即使orElseGet() 在Optional 為​​非時不呼叫提供的函數,為空時,它仍然計算 lambda 表達式。這意味著表達式中的任何副作用仍然會發生。

結論:

orElseGet() 提供了一種延遲預設值執行的方法檢索函數直到有必要為止,在Optional非空時取得預設值值成本昂貴或不受歡迎的情況下,允許性能優化。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板