之前 ,我写过Java 8中引入的Optional类,该类用于对可能不存在的值进行建模并减少可能引发NullPointerException的位置的数量。
Java 9向Optional添加了三个新方法:
1. ifPresentOrElse
新ifPresentOrElse方法允许你执行一个动作,如果Optional存在,如果不同的操作Optional是不存在。 例如:
lookup(userId).ifPresentOrElse(this::displayUserDetails,this::displayError)2.流
新的stream方法使将Optional对象流转换为其中存在的值流变得更加容易。 以前(在Java 8中),您需要两个步骤来实现这一目标。 首先,您将过滤掉空的Optional ,然后将其余部分拆箱以获取它们的值。 如下所示:
// In Java 8:
Stream.of("alice", "bob", "charles").map(UserDirectory::lookup).filter(Optional::isPresent).map(Optional::get).collect(toList()); 在Java 9中,使用stream方法使代码变得更简单:
// In Java 9:
Stream.of("alice", "bob", "charles").map(UserDirectory::lookup).flatMap(Optional::stream).collect(toList());3.或
or方法与orElseGet方法有些相似,但是返回Optional对象而不是值。 如果存在值,则返回现有的Optional 。 如果该值不存在,则返回提供功能产生的Optional 。 例如:
lookup(userId).or(() -> lookupInAnotherDatabase(userId));翻译自: https://www.javacodegeeks.com/2017/12/java-9-enhancements-optional.html