日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

orelse_可选的orElse vs orElseGet

發布時間:2023/12/3 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 orelse_可选的orElse vs orElseGet 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

orelse

Java 8引入了一個很棒的Optional概念,我們在博客Java 8 Optional中進行了研究 。

因此,為了簡要說明一下,Optional用于表示Optional對象或空值,而不是null引用。 這將有助于避免在我們嘗試對空引用對象執行某些操作時發生空指針異常。

為了從可選對象訪問值 ,很少有諸如get,orELse,orElseGet之類的方法。每當我們查看orElse與orElseGet方法時,我們總是會感到困惑。 有什么區別以及何時使用哪種方法?

當我們概述這些方法時,我們認為可以使用orElse(functionCall())代替orElseGet(Class :: functionDef),它將獲得相同的結果。 那么為什么需要創建兩種不同的方法呢? 直截了當的答案是行為存在差異,并且在表現情況下它們會產生巨大差異。

讓我們在此博客中詳細查看其每個行為。

orElse與orElseGet的語法

OrElse方法采用一個參數,如果可選參數沒有值,則將返回該參數。

OrElseGet方法需要一個函數,如果可選選項沒有值,則該函數將被執行以返回值。

這表明orElse方法需要一個值,而orElseGet方法需要提供者的功能。

如果我們將函數傳遞給orElse方法,它將始終在執行語句之前執行以適合語法。 但是,在orElseGet方法的情況下,我們無法傳遞值,并且僅當可選參數沒有值時才執行該函數。

區別:orElse與orElseGet

如果optional為null,我們將使用以下函數獲取值

public String getFunctionForTest() { System.out.println( "\n ===== function called ===== " ); return "default value" ; }

讓我們來看看Optional對象具有空值的情況

public void orElseVSorElseGet() { Optional<String> optional = Optional.ofNullable(null); ?String orElseGetResult = optional.orElseGet( this ::getFunctionForTest); System.out.println( "value in orElseGetResult " + orElseGetResult); ?String orElseResult = optional.orElse( this .getFunctionForTest()); System.out.println( "value in orElseResult " + orElseResult); }

輸出:

===== function called ===== value in orElseGetResult default value ===== function called ===== value in orElseResult default value

正如我們看到的那樣,該期權沒有價值,我們需要采取其他形式的價值。 因此,正如預期的那樣,在兩種情況下都會調用該函數。

現在讓我們舉一個例子,我們在可選對象中有值,我們不需要執行其他部分

public void orElseVSorElseGet() { Optional<String> optional = Optional.ofNullable( "value found" ); String orElseGetResult = optional.orElseGet( this ::getFunctionForTest); System.out.println( "value in orElseGetResult " + orElseGetResult); ?String orElseResult = optional.orElse( this .getFunctionForTest()); System.out.println( "value in orElseResult " + orElseResult); }

輸出:

value in orElseGetResult default value ===== function called ===== value in orElseResult default value

我們知道選項對象具有值,因此我們不需要將價值形式取為其他部分。

因此,我們希望不應執行該功能。 但是,在orElse方法的情況下執行了該功能。

在上面的示例中,我們可能沒有注意到性能差異,但是當我們有復雜的過程來采用默認值時,它將影響性能。 您可以考慮需要數據庫或網絡調用以獲取默認值的示例,即使您有值,它也會變慢。

在這種情況下,最好使用orElseGet方法。

在orElse的情況下,即使存在值,也將計算其他部分。 如果我們有默認的靜態值,那么orElse是一個不錯的選擇。 如果您需要默認值的計算邏輯,則應使用orElseGet。

快速閱讀

  • 可選的OrElse方法采用參數
  • 可選中的OrElseGet方法需要供應商函數
  • 在orElse方法的情況下,即使存在值,也要計算其他部分
  • 如果是orElseGet方法,則只有在Optional對象為空時才計算else部分
  • 對于固定值或應使用Else方法
  • 如果需要在運行時計算值,則應使用orElseGet

相關話題

  • Java 8可選細節
  • Java 8功能
  • Lambda表達式Java 8

翻譯自: https://www.javacodegeeks.com/2020/07/optional-orelse-vs-orelseget.html

orelse

總結

以上是生活随笔為你收集整理的orelse_可选的orElse vs orElseGet的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。