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

相关推荐
_修铁路的几秒前
解决 EasyExcel 填充图片占满单元格问题
java·easyexcel
HanhahnaH16 分钟前
Spring集合注入Bean
java·spring
未定义.22122 分钟前
电子削铅笔刀顺序图详解:从UML设计到PlantUML实现
java·软件工程·uml
雾月5539 分钟前
LeetCode 1292 元素和小于等于阈值的正方形的最大边长
java·数据结构·算法·leetcode·职场和发展
24k小善2 小时前
Flink TaskManager详解
java·大数据·flink·云计算
想不明白的过度思考者2 小时前
Java从入门到“放弃”(精通)之旅——JavaSE终篇(异常)
java·开发语言
.生产的驴2 小时前
SpringBoot 封装统一API返回格式对象 标准化开发 请求封装 统一格式处理
java·数据库·spring boot·后端·spring·eclipse·maven
猿周LV2 小时前
JMeter 安装及使用 [软件测试工具]
java·测试工具·jmeter·单元测试·压力测试
晨集2 小时前
Uni-App 多端电子合同开源项目介绍
java·spring boot·uni-app·电子合同
时间之城2 小时前
笔记:记一次使用EasyExcel重写convertToExcelData方法无法读取@ExcelDictFormat注解的问题(已解决)
java·spring boot·笔记·spring·excel