什么是 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
有所帮助。