一个 Optional 类提供了一个容器,该容器可能包含也可能不包含一个 非空值。这个 Optional 类在 Java 8 中引入,以减少代码中可能生成 NullPointerException 的地方。Java 9 添加了三个新的方法到 Optional 类中:or()、ifPresentOrElse() 和 stream(),这些方法帮助我们处理 默认 值。
Java 9 中引入了 or() 方法,该方法的参数是一个函数接口 Supplier。该方法总是给我们一个非空的 Optional 对象。如果 Optional 对象不为空,则返回该 Optional 对象本身。否则,返回由 Supplier 创建的 Optional 对象。
import java.io.IOException; import java.util.Optional; public class OptionalOrMethodTest { public static void main(String[] args) throws IOException { String str = null; Optional<String> opt = Optional.ofNullable(str); Optional<String> result = opt.or(() -> Optional.of("Adithya")); System.out.println(result); } }
Optional[Adithya]
Java 9中引入了ifPresentOrElse()方法。它与ifPresent()方法相似,唯一的区别是我们增加了一个Runnable 参数。如果一个Optional 对象为空,可以执行Runnable 接口的对象。
import java.util.Optional; public class OptionalIfPresentOrElseTest { public static void main(String[] args) { String str = null; Optional<String> opt = Optional.ofNullable(str); opt.ifPresentOrElse( x -> System.out.println(x), () -> System.out.println("No value")); } }
No value
The Optional.stream() method is supported since Java 9. This method can be used to create a new stream object from an Optional object. If an Optional object contains a value, it returns the stream object containing that value.
import java.io.IOException; import java.util.List; import java.util.Optional; import java.util.stream.Stream; public class OptionalStreamMethodTest { public static void main(String[] args) throws IOException { List<Optional<String>> list = List.of( Optional.of("Jai"), Optional.empty(), Optional.of("Adithya")); Stream<String> stream = list.stream().flatMap(Optional::stream); stream.forEach(System.out::println); } }
Jai Adithya