一个可选的类提供可以或可以不包含一个容器非空 值。Java 8中引入的此Optional类,以减少代码中可以生成NullPointerException 的位数。Java 9向Optional类添加了三个新方法:or(),ifPresentOrElse()和stream(),它们可以帮助我们处理默认 值。
Java 9中引入的or()方法,该方法的参数是功能接口Supplier。此方法始终为我们提供一个非空的Optional 对象。如果Optional对象不为空,则返回Optional 对象本身。否则,它将返回供应商 创建的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]
ifPresentOrElse()方法在Java中9中引入它类似于ifPresent()方法用一个不同的是,我们已经增加了一个可运行 参数。如果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
Optional.stream()方法被支撑自从Java 9.该方法可用于从创建一个新的流对象可选 对象。如果Optional对象包含一个值,它将返回包含该值的流对象。
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