最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析Java中如何優(yōu)雅地處理null值

 更新時間:2025年04月16日 14:55:34   作者:寫bug寫bug  
這篇文章主要為大家詳細介紹了如何結(jié)合 Lambda 表達式和 Optional,讓 Java 更優(yōu)雅地處理 null 值,感興趣的小伙伴可以跟隨小編一起學習一下

假設我們有一個學生對象,以及這個學生對象的 Optional 包裝器:

public class Student {
    private String name;
    private Integer age;

    // 全參構造函數(shù)
    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public Integer getAge() {
        return age;
    }
    // toString 方法
    @Override
    public String toString() {
        return"Student{" + "name='" + name + '\'' + ", age=" + age + '}';
    }
}

public class OptionalTest {
    public static void main(String[] args) {
        Student student = new Student("Bob", 18);
        Optional<Student> studentOpt = Optional.ofNullable(student);
    }
}

如果不與 Lambda 結(jié)合使用,Optional 并不能簡化原本繁瑣的 null 值檢查。例如:

// 編寫方法 1
if (student == null) {
    return UNKNOWN_STUDENT;
} else {
    return student;
}
// 編寫方法 2
if (!studentOpt.isPresent()) {
    return UNKNOWN_STUDENT;
} else {
    return studentOpt.get();
}

只有將 Optional 與 Lambda 結(jié)合使用,才能發(fā)揮它真正的威力!

現(xiàn)在,讓我們對比一下 Java 8 中 Lambda + Optional 與傳統(tǒng) Java 在以下四種常見 null 處理場景中的差異。

場景 1:不為 null 則執(zhí)行

// if 語句
if (student!= null) {
    System.out.println(student);
}
// Optional
studentOpt.ifPresent(System.out::println);

場景 2:不為 null 則返回,為 null 則返回特定值或拋出異常

// if 語句
if (student == null) {
    return UNKNOWN_STUDENT; // 或拋出異常
} else {
    return student;
}
// Optional
return studentOpt.orElse(UNKNOWN_STUDENT);
return studentOpt.orElseThrow(RuntimeException::new);

場景 3:不為 null 則返回,為 null 則由調(diào)用方法

// if 語句
if (student == null) {
    return UNKNOWN_STUDENT;
} else {
    return generateWithFunction();
}
// Optional
return studentOpt.orElseGet(() -> generateWithFunction());

場景 4:嵌套 null 檢查

// Java 7
if (student!= null) {
    String name = student.getName();
    if (name!= null) {
        return name;
    } else {
        return null;
    }
} else {
    return null;
}
// Java 8
return studentOpt.map(Student::getName).orElse(null);

從以上四種場景可以明顯看出,Optional + Lambda 讓我們少寫了很多 if-else 代碼塊。尤其是場景 4,傳統(tǒng)的 Java 寫法顯得冗長且難以理解,而 Optional+Lambda 則簡潔明了,清晰易懂。

總結(jié)

通過結(jié)合 Lambda 表達式和 Optional,Java 的 null 處理變得更加優(yōu)雅和簡潔。希望這篇文章能幫助你更好地理解和使用這些特性。

到此這篇關于淺析Java中如何優(yōu)雅地處理null值的文章就介紹到這了,更多相關Java處理null值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java導出Execl疑難點處理的實現(xiàn)

    Java導出Execl疑難點處理的實現(xiàn)

    這篇文章主要介紹了Java導出Execl疑難點處理的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • Sentinel實現(xiàn)動態(tài)配置的集群流控的方法

    Sentinel實現(xiàn)動態(tài)配置的集群流控的方法

    這篇文章主要介紹了Sentinel實現(xiàn)動態(tài)配置的集群流控,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Java使用pulsar-flink-connector讀取pulsar catalog元數(shù)據(jù)代碼剖析

    Java使用pulsar-flink-connector讀取pulsar catalog元數(shù)據(jù)代碼剖析

    這篇文章主要介紹了Java使用pulsar-flink-connector讀取pulsar catalog元數(shù)據(jù)代碼剖析,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Spring探秘之如何妙用BeanPostProcessor

    Spring探秘之如何妙用BeanPostProcessor

    BeanPostProcessor也稱為Bean后置處理器,它是Spring中定義的接口,在Spring容器的創(chuàng)建過程中會回調(diào)BeanPostProcessor中定義的兩個方法,這篇文章主要給大家介紹了關于Spring探秘之如何妙用BeanPostProcessor的相關資料,需要的朋友可以參考下
    2022-01-01
  • 解決Java中SimpleDateFormat線程不安全的五種方案

    解決Java中SimpleDateFormat線程不安全的五種方案

    SimpleDateFormat 就是一個典型的線程不安全事例,本文主要介紹了解決Java中SimpleDateFormat線程不安全的五種方案,需要的朋友們下面隨著小編來一起學習學習吧
    2021-05-05
  • IDEA下載并大學生edu郵箱認證免費使用教程(圖文)

    IDEA下載并大學生edu郵箱認證免費使用教程(圖文)

    這篇文章主要介紹了IDEA下載并大學生edu郵箱認證免費使用教程(圖文),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 鴻蒙PC上搭建多語言開發(fā)環(huán)境Java/Python/Go/Rust配置完全指南

    鴻蒙PC上搭建多語言開發(fā)環(huán)境Java/Python/Go/Rust配置完全指南

    對于鴻蒙開發(fā)者而言,一個正確配置的開發(fā)環(huán)境是所有后續(xù)工作的基石,下面這篇文章主要介紹了鴻蒙PC上搭建多語言開發(fā)環(huán)境Java/Python/Go/Rust配置的相關資料,需要的朋友可以參考下
    2026-05-05
  • spring?boot集成smart-doc自動生成接口文檔詳解

    spring?boot集成smart-doc自動生成接口文檔詳解

    這篇文章主要介紹了spring?boot集成smart-doc自動生成接口文檔詳解,smart-doc是一款同時支持java?restful?api和Apache?Dubbo?rpc接口文檔生成的工具,smart-doc顛覆了傳統(tǒng)類似swagger這種大量采用注解侵入來生成文檔的實現(xiàn)方法
    2022-09-09
  • java堆棧類使用實例(java中stack的使用方法)

    java堆棧類使用實例(java中stack的使用方法)

    java中stack的使用方法,堆棧是一種"后進先出"(LIFO) 的數(shù)據(jù)結(jié)構, 只能在一端進行插入(稱為"壓棧") 或刪除 (稱為"出棧")數(shù)據(jù)的操作,下面看示例吧
    2013-12-12
  • Java使用FileOutputStream寫Excel文件不落盤的解決方法

    Java使用FileOutputStream寫Excel文件不落盤的解決方法

    最近在寫 Java 代碼處理 Excel 文件的時候,遇到了一個挺頭疼的問題:使用 Apache POI 的 XSSFWorkbook.write(FileOutputStream) 方法寫文件,生成的 Excel 文件卻打不開,所以本文就給大家介紹了Java使用FileOutputStream寫Excel文件不落盤的解決方法
    2025-11-11

最新評論

林周县| 抚州市| 金昌市| 旌德县| 莱西市| 揭阳市| 本溪| 仲巴县| 凌海市| 平塘县| 博白县| 会东县| 花莲市| 万荣县| 通辽市| 怀安县| 舒兰市| 奉贤区| 滨海县| 湖州市| 拜泉县| 乌拉特后旗| 靖安县| 禹城市| 北票市| 荃湾区| 黄大仙区| 洛隆县| 固始县| 合江县| 上饶市| 左权县| 元朗区| 游戏| 辽源市| 岳阳市| 北安市| 大足县| 乾安县| 瓦房店市| 周宁县|