请稍等...

小波Note

四川 · 成都市多云16 ℃
中文

Java Optional

成都 (cheng du)2024/8/27 17:50:173.04k预计阅读时间 10 分钟收藏Ctrl + D / ⌘ + D
cover
IT FB(up 主)
后端开发工程师

Optional 是 Java 8 引入的一个容器类,用于表示可能包含或不包含非空值的对象。它主要用于避免 NullPointerException 并提供更优雅的空值处理方式。以下是一些常见的 Optional 用法示例

创建 Optional 对象

Optional.of(value):创建一个包含非空值的 Optional 对象。

Optional.ofNullable(value):创建一个可能包含空值的 Optional 对象。

Optional.empty():创建一个空的 Optional 对象。

检查 Optional 是否包含值

isPresent():如果 Optional 包含值,则返回 true

ifPresent(Consumer<? super T> action):如果 Optional 包含值,则执行给定的操作。

获取 Optional 的值

get():如果 Optional 包含值,则返回该值,否则抛出 NoSuchElementException

orElse(T other):如果 Optional 包含值,则返回该值,否则返回默认值。

orElseGet(Supplier<? extends T> other):如果 Optional 包含值,则返回该值,否则调用 Supplier 并返回其结果。

orElseThrow(Supplier<? extends X> exceptionSupplier):如果 Optional 包含值,则返回该值,否则抛出由 Supplier 提供的异常。

转换 Optional 的值

map(Function<? super T, ? extends U> mapper):如果 Optional 包含值,则应用映射函数并返回一个新的 Optional

flatMap(Function<? super T, Optional<U>> mapper):与 map 类似,但映射函数返回 Optional,不会嵌套 Optional

示例

java
        import java.util.Optional;

public class OptionalExamples {

    public static void main(String[] args) {
        // 创建 Optional 对象
        Optional<String> nonEmptyOptional = Optional.of("Hello, World!");
        Optional<String> nullableOptional = Optional.ofNullable(null);
        Optional<String> emptyOptional = Optional.empty();

        // 检查 Optional 是否包含值
        System.out.println("nonEmptyOptional is present: " + nonEmptyOptional.isPresent());
        System.out.println("nullableOptional is present: " + nullableOptional.isPresent());
        System.out.println("emptyOptional is present: " + emptyOptional.isPresent());

        // 获取 Optional 的值
        System.out.println("nonEmptyOptional value: " + nonEmptyOptional.get());
        System.out.println("nullableOptional value or default: " + nullableOptional.orElse("Default Value"));
        System.out.println("emptyOptional value or default: " + emptyOptional.orElse("Default Value"));

        // 使用 ifPresent 执行操作
        nonEmptyOptional.ifPresent(value -> System.out.println("Value is present: " + value));

        // 转换 Optional 的值
        Optional<Integer> lengthOptional = nonEmptyOptional.map(String::length);
        System.out.println("Length of nonEmptyOptional value: " + lengthOptional.orElse(0));

        // 使用 flatMap 进行嵌套 Optional 的处理
        Optional<Optional<String>> nestedOptional = Optional.of(Optional.of("Nested Value"));
        Optional<String> flatMappedValue = nestedOptional.flatMap(opt -> opt);
        System.out.println("FlatMapped value: " + flatMappedValue.orElse("No Value"));
    }
}