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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

orelse_可选的orElse vs orElseGet

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

orelse

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

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

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

當(dāng)我們概述這些方法時,我們認為可以使用orElse(functionCall())代替orElseGet(Class :: functionDef),它將獲得相同的結(jié)果。 那么為什么需要創(chuàng)建兩種不同的方法呢? 直截了當(dāng)?shù)拇鸢甘切袨榇嬖诓町?#xff0c;并且在表現(xiàn)情況下它們會產(chǎn)生巨大差異。

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

orElse與orElseGet的語法

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

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

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

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

區(qū)別:orElse與orElseGet

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

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

正如我們看到的那樣,該期權(quán)沒有價值,我們需要采取其他形式的價值。 因此,正如預(yù)期的那樣,在兩種情況下都會調(diào)用該函數(shù)。

現(xiàn)在讓我們舉一個例子,我們在可選對象中有值,我們不需要執(zhí)行其他部分

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

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

因此,我們希望不應(yīng)執(zhí)行該功能。 但是,在orElse方法的情況下執(zhí)行了該功能。

在上面的示例中,我們可能沒有注意到性能差異,但是當(dāng)我們有復(fù)雜的過程來采用默認值時,它將影響性能。 您可以考慮需要數(shù)據(jù)庫或網(wǎng)絡(luò)調(diào)用以獲取默認值的示例,即使您有值,它也會變慢。

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

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

快速閱讀

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

相關(guān)話題

  • Java 8可選細節(jié)
  • Java 8功能
  • Lambda表達式Java 8

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

orelse

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。