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

相关推荐
小李不想输啦2 小时前
什么是微服务、微服务如何实现Eureka,网关是什么,nacos是什么
java·spring boot·微服务·eureka·架构
张铁铁是个小胖子2 小时前
微服务学习
java·学习·微服务
ggs_and_ddu2 小时前
Android--java实现手机亮度控制
android·java·智能手机
敲代码娶不了六花3 小时前
jsp | servlet | spring forEach读取不了对象List
java·spring·servlet·tomcat·list·jsp
Yhame.3 小时前
深入理解 Java 中的 ArrayList 和 List:泛型与动态数组
java·开发语言
是小崔啊5 小时前
开源轮子 - EasyExcel02(深入实践)
java·开源·excel
myNameGL5 小时前
linux安装idea
java·ide·intellij-idea
青春男大5 小时前
java栈--数据结构
java·开发语言·数据结构·学习·eclipse
HaiFan.6 小时前
SpringBoot 事务
java·数据库·spring boot·sql·mysql
我要学编程(ಥ_ಥ)6 小时前
一文详解“二叉树中的深搜“在算法中的应用
java·数据结构·算法·leetcode·深度优先