【Java学习之路】Optional 一个优雅的判空容器 (◍•ᴗ•◍) 快速入门

什么是 Optional ?

Optional 是 Java 中用于处理可能为 null 的值的容器类。它提供了一种优雅的方式来避免空指针异常,并且能够更清晰地表示一个值可能缺失的情况。

说白了 Optional 就像是一个小箱子,你可以把可能是空的东西放进去,然后这个箱子给你判断这个值是存在还是不存在的情况。

创建 Optional 对象

使用 Optional.of(value) 来创建一个包含非空值的 Optional 对象,使用 Optional.empty() 来创建一个空的 Optional 对象。

ini 复制代码
Optional<String> nonEmptyOptional = Optional.of("Hello, Optional!");
Optional<String> emptyOptional = Optional.empty();

判断值是否存在

使用 isPresent() 方法来检查值是否存在。

csharp 复制代码
if (nonEmptyOptional.isPresent()) {
    System.out.println("Value is present: " + nonEmptyOptional.get());
} else {
    System.out.println("Value is absent.");
}

使用函数式方式判断值是否存在

使用 ifPresent(Consumer consumer) 方法以函数式方式处理值的存在与否。

csharp 复制代码
nonEmptyOptional.ifPresent(value -> System.out.println("Value is present: " + value));

获取值或默认值

使用 orElse(T other) 方法来获取值,如果值不存在,则返回指定的默认值。

ini 复制代码
String result = nonEmptyOptional.orElse("Default Value");
System.out.println("Result: " + result);

获取值或由供应商提供的默认值

使用 orElseGet(Supplier other) 方法来获取值,如果值不存在,则由提供的 Supplier 生成默认值。

ini 复制代码
String result = emptyOptional.orElseGet(() -> "Default Value from Supplier");
System.out.println("Result: " + result);

抛出异常或自定义异常

使用 orElseThrow(Supplier exceptionSupplier) 方法来获取值,如果值不存在,则抛出由提供的 Supplier 生成的异常。

ini 复制代码
String result = nonEmptyOptional.orElseThrow(() -> new RuntimeException("Value not present"));
System.out.println("Result: " + result);

条件过滤值

使用 filter(Predicate predicate) 方法来过滤值,如果值满足条件,则返回包含该值的 Optional 对象,否则返回空的 Optional 对象。

vbnet 复制代码
Optional<String> filteredOptional = nonEmptyOptional.filter(value -> value.contains("Hello"));
System.out.println("Filtered Optional: " + filteredOptional.orElse("Value not found"));

映射值

使用 map(Function mapper) 方法来对值进行映射。

vbnet 复制代码
Optional<Integer> mappedOptional = nonEmptyOptional.map(String::length);
System.out.println("Mapped Optional: " + mappedOptional.orElse(-1));

扁平映射值

使用 flatMap(Function> mapper) 方法来进行扁平映射,用于处理嵌套的 Optional

vbnet 复制代码
Optional<Integer> flatMappedOptional = nonEmptyOptional.flatMap(value -> Optional.of(value.length()));
System.out.println("FlatMapped Optional: " + flatMappedOptional.orElse(-1));

这些是 Optional 的一些基本用法,希望对你理解和使用 Optional 有所帮助。

相关推荐
future14121 小时前
C#每日学习日记
java·学习·c#
一个混子程序员1 小时前
SpringBoot自定义Schedule注解
java
心之语歌1 小时前
Java高效压缩技巧:ZipOutputStream详解
java·后端
booooooty1 小时前
基于Spring AI Alibaba的多智能体RAG应用
java·人工智能·spring·多智能体·rag·spring ai·ai alibaba
猴哥源码1 小时前
基于Java+SpringBoot的健身房管理系统
java·spring boot
极光雨雨1 小时前
Spring Bean 控制销毁顺序的方法总结
java·spring
猴哥源码1 小时前
基于Java+SpringBoot的三国之家网站
java·spring boot
念九_ysl1 小时前
Java 使用 OpenHTMLToPDF + Batik 将含 SVG 遮罩的 HTML 转为 PDF 的完整实践
java·开发语言·pdf
yaoxin5211232 小时前
124. Java 泛型 - 有界类型参数
java·开发语言
Spirit_NKlaus2 小时前
解决HttpServletRequest无法获取@RequestBody修饰的参数
java·spring boot·spring