日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

Java Optional 的 orElse() 和 orElseGet() 的区别

發(fā)布時間:2025/3/20 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java Optional 的 orElse() 和 orElseGet() 的区别 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 接收的參數(shù)不同

orElse()方法以一個自定義類型的數(shù)據(jù)作為參數(shù)

public T orElse(T t)

orElseGet()方法以一個Supplier類型的數(shù)據(jù)作為參數(shù)

public T orElseGet(Supplier<? extends T> other)

2. 程序的執(zhí)行過程不同

以下面一段代碼為例:

public static void main(String[] args) {String[] names = new String[]{"zhang", "wang", "li", "zhao", "wu"};Optional.of("wang").orElse(getRandomName(names)); // 執(zhí)行該句時會打印"Generating a name..."Optional.of("wang").orElseGet(() -> getRandomName(names)); }public static String getRandomName(String[] names) {System.out.println("Generating a name...");Random random = new Random();return names[random.nextInt(5)]; }

在上述代碼在運行Optional.of("wang").orElse(getRandomName(names))時會打印"Generating a name...",而在運行Optional.of("wang").orElseGet(() -> getRandomName(names))時沒有任何輸出,這說明了orElse()中的函數(shù)getRandomName被調用了,而orElseGet()中的Lambda表達式?jīng)]有執(zhí)行。

產生上述現(xiàn)象的原因是,無論Optional對象中的值是否為空,orElse()函數(shù)都會執(zhí)行;而由于orElseGet()中的參數(shù)為一個Supplier方法,該方法的特點是僅在必要的時候執(zhí)行,因此只有在Optional對象中的值為空時,orElseGet()中的Supplier方法才會執(zhí)行。

3. 性能差異

由于orElse()和orElseGet()執(zhí)行過程的差異,orElseGet()方法的執(zhí)行效率相對而言也更快,這是因為他會跳過不必要的方法調用。

因此,只有當默認值已經(jīng)事先定義的情況下,才使用orElse(),否則使用orElseGet()更好。

總結

以上是生活随笔為你收集整理的Java Optional 的 orElse() 和 orElseGet() 的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

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