java中orElse和orElseGet方法區(qū)別小結(jié)
前言
orElse 和 orElseGet 是 Optional 類的兩個(gè)方法,用于處理可能為空的值。
orElse()
當(dāng)optional值不存在時(shí),調(diào)用orElse()返回orElse()的參數(shù),如果optional的值存在時(shí)返回optional的值
orElseGet()
當(dāng)optional值不存在時(shí),調(diào)用orElseGet()中接口調(diào)用的返回值,如果optional的值存在時(shí)返回optional的值,例子如下:
import java.util.Optional;
public class Main {
public static void main(String[] args){
String nullValue = null;
String optional = Optional.ofNullable(nullValue).orElse("Su");
System.out.println(optional);
String optionalGet = Optional.ofNullable(nullValue).orElseGet(() -> "Xiao");
System.out.println(optionalGet);
String nonNullOptional = Optional.ofNullable("Susan").orElse("Su");
System.out.println(nonNullOptional);
String nonNullOptionalGet = Optional.ofNullable("Molly").orElseGet(() -> "Xiao");
System.out.println(nonNullOptionalGet);
}
}結(jié)果:
Su
Xiao
Susan
Molly
區(qū)別
- orElse 方法:
- orElse 方法接受一個(gè)默認(rèn)值作為參數(shù),并在 Optional 對(duì)象為空時(shí)返回該默認(rèn)值。
- 無論 Optional 對(duì)象是否為空,orElse 方法都會(huì)執(zhí)行默認(rèn)值的計(jì)算。
- 示例:
Optional<String> value = Optional.ofNullable(someValue);
String result = value.orElse("default");
- orElseGet 方法:
- orElseGet 方法接受一個(gè) Supplier 函數(shù)式接口作為參數(shù),并在 Optional 對(duì)象為空時(shí)調(diào)用該函數(shù)式接口獲取默認(rèn)值。
- 只有在 Optional 對(duì)象為空時(shí),orElseGet 方法才會(huì)執(zhí)行默認(rèn)值的計(jì)算。
- 示例:
Optional<String> value = Optional.ofNullable(someValue); String result = value.orElseGet(() -> computeDefaultValue());
總結(jié)
- orElse 方法總是會(huì)計(jì)算默認(rèn)值,無論 Optional 對(duì)象是否為空。
- orElseGet 方法只有在 Optional 對(duì)象為空時(shí)才會(huì)計(jì)算默認(rèn)值,可以通過 Supplier 函數(shù)式接口提供延遲計(jì)算的能力。
- 在使用時(shí),根據(jù)具體需求選擇適合的方法。如果默認(rèn)值的計(jì)算是簡單的常量或已經(jīng)存在的值,可以使用 orElse 方法。如果默認(rèn)值的計(jì)算涉及復(fù)雜的邏輯或需要延遲計(jì)算,可以使用 orElseGet 方法。
到此這篇關(guān)于java中orElse和orElseGet方法區(qū)別的文章就介紹到這了,更多相關(guān)java orElse和orElseGet區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java編譯時(shí)與運(yùn)行時(shí)概念與實(shí)例詳解
本篇文章通過實(shí)例對(duì) java程序編譯時(shí)與運(yùn)行時(shí)進(jìn)行了詳解,需要的朋友可以參考下2017-04-04
Java設(shè)計(jì)模式之備忘錄模式(Memento模式)介紹
這篇文章主要介紹了Java設(shè)計(jì)模式之備忘錄模式(Memento模式)介紹,memento是一個(gè)保存另外一個(gè)對(duì)象內(nèi)部狀態(tài)拷貝的對(duì)象,這樣以后就可以將該對(duì)象恢復(fù)到原先保存的狀態(tài),需要的朋友可以參考下2015-03-03
Spring boot+VUE實(shí)現(xiàn)token驗(yàn)證的示例代碼
本文詳細(xì)介紹了使用Vue和SpringBoot實(shí)現(xiàn)token認(rèn)證的方法,包括前后端交互流程、后端依賴導(dǎo)入、token工具類、攔截器、跨域處理、前端路由守衛(wèi)、請(qǐng)求攔截器等內(nèi)容,具有一定的參考價(jià)值,感興趣的可以了解一下2024-10-10
SpringBoot中使用@scheduled定時(shí)執(zhí)行任務(wù)的坑
本文主要介紹了SpringBoot中使用@scheduled定時(shí)執(zhí)行任務(wù)的坑,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-05-05
Spring Cloud Config Client超時(shí)及重試示例詳解
這篇文章主要給大家介紹了關(guān)于Spring Cloud Config Client超時(shí)及重試的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05
Java中ConcurrentHashMap是如何實(shí)現(xiàn)線程安全
ConcurrentHashMap是一個(gè)哈希表,支持檢索的全并發(fā)和更新的高預(yù)期并發(fā)。本文主要介紹了Java中ConcurrentHashMap是如何實(shí)現(xiàn)線程安全,感興趣的可以了解一下2021-11-11
Java音頻處理之音頻流轉(zhuǎn)音頻文件和獲取音頻播放時(shí)長詳解
這篇文章主要為大家詳細(xì)介紹了如何使用Java實(shí)現(xiàn)音頻流轉(zhuǎn)音頻文件和獲取音頻播放時(shí)長功能,文中的示例代碼簡潔易懂,有需要的小伙伴可以了解下2025-07-07

