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

相关推荐
艾迪的技术之路22 分钟前
redisson使用lock导致死锁问题
java·后端·面试
今天背单词了吗98040 分钟前
算法学习笔记:8.Bellman-Ford 算法——从原理到实战,涵盖 LeetCode 与考研 408 例题
java·开发语言·后端·算法·最短路径问题
天天摸鱼的java工程师42 分钟前
使用 Spring Boot 整合高德地图实现路线规划功能
java·后端
东阳马生架构1 小时前
订单初版—2.生单链路中的技术问题说明文档
java
咖啡啡不加糖1 小时前
暴力破解漏洞与命令执行漏洞
java·后端·web安全
风象南1 小时前
SpringBoot敏感配置项加密与解密实战
java·spring boot·后端
DKPT1 小时前
Java享元模式实现方式与应用场景分析
java·笔记·学习·设计模式·享元模式
Percep_gan2 小时前
idea的使用小技巧,个人向
java·ide·intellij-idea
缘来是庄2 小时前
设计模式之迭代器模式
java·设计模式·迭代器模式