之前 ,我写过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