【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 有所帮助。

相关推荐
xiezhr28 分钟前
用户只需要知道「怎么办」,不需要知道「为什么炸了」
java·api·接口设计规范
xiezhr31 分钟前
接口设计18条军规:写给那些半夜被“502”叫醒的人
java·api·restful
RainbowSea10 小时前
12. LangChain4j + 向量数据库操作详细说明
java·langchain·ai编程
RainbowSea10 小时前
11. LangChain4j + Tools(Function Calling)的使用详细说明
java·langchain·ai编程
考虑考虑14 小时前
Jpa使用union all
java·spring boot·后端
用户37215742613514 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
用户2680013791914 小时前
多语言采集京东商品评论,京东API(json数据返回)
api
RestCloud14 小时前
SQL Server到Hive:批处理ETL性能提升30%的实战经验
数据库·api
RestCloud15 小时前
为什么说零代码 ETL 是未来趋势?
数据库·api
浮游本尊15 小时前
Java学习第22天 - 云原生与容器化
java