📜  Java 8 可选类(1)

📅  最后修改于: 2023-12-03 15:31:28.255000             🧑  作者: Mango

Java 8 可选类

Java 8 引入了一个新的类 Optional,它允许我们在某些情况下不返回 null 值,并且提供了一些有用的方法来处理这些可选值。

什么是 Optional 类

Optional 类是一个容器对象,它可能包含一个非 null 值或者什么都不包含。它是一个 final 类,不能被继承,并且它提供了大量的方法来处理容器中的数据。

如何创建 Optional 对象

可以使用静态工厂方法来创建 Optional 对象:

Optional<String> empty = Optional.empty(); // 创建一个空的 Optional 对象
Optional<String> ofNullable = Optional.ofNullable("hello"); // 创建一个包含非 null 值的 Optional 对象
Optional<String> of = Optional.of("world"); // 创建一个包含非 null 值的 Optional 对象,如果参数为 null,则会抛出 NullPointerException 异常
如何访问 Optional 对象的值

可以使用 isPresent() 方法来检查 Optional 对象是否包含一个非 null 值。如果 Optional 包含一个值,则返回 true,否则返回 false。

Optional<String> optional = Optional.of("hello");

if (optional.isPresent()) {
  String value = optional.get();
  System.out.println(value); // "hello"
}

也可以使用 ifPresent() 方法来访问 Optional 对象的值,如果 Optional 包含一个非 null 值,则会执行传递的 Lambda 表达式。

Optional<String> optional = Optional.of("hello");

optional.ifPresent(v -> System.out.println(v)); // "hello"

另外,也可以通过 orElse()orElseGet() 方法来获取 Optional 对象的值。如果 Optional 对象包含一个非 null 值,则返回该值,否则返回传递的默认值或者调用传递的 Supplier 生成的默认值。

Optional<String> optional = Optional.ofNullable(null);

String value1 = optional.orElse("world"); // "world"
String value2 = optional.orElseGet(() -> "world"); // "world"
如何转换 Optional 对象的值

可以使用 map()flatMap() 方法来转换 Optional 对象的值。如果 Optional 对象包含一个非 null 值,则会执行传递的 Lambda 表达式,并返回一个包含转换结果的 Optional 对象。如果 Optional 对象包含一个 null 值,则返回一个空的 Optional 对象。

Optional<String> optional = Optional.of("hello");

Optional<Integer> length = optional.map(String::length); // Optional[5]
Optional<Integer> emptyLength = Optional.ofNullable(null).map(String::length); // Optional.empty()

flatMap() 方法与 map() 类似,但是它的结果必须是一个 Optional 对象。

Optional<String> optional = Optional.of("hello");

Optional<Integer> length = optional.flatMap(s -> Optional.of(s.length())); // Optional[5]
总结

Optional 类是一个非常有用的类,它可以帮助我们更好地处理 null 值,避免空指针异常,并提供了一些有用的方法来处理可选值。在编写 Java 8 代码时,建议尽可能地使用 Optional 类来编写更安全和可读性更高的代码。