下面的代码将一个对象列表转换为一个可选对象列表。有没有一种优雅的方法可以使用Java8的流来实现这一点?
List<Object> originalList = Arrays.asList(new Object(), new Object());
List<Optional<Object>> convertedList = new ArrayList<>();
for (Object object : originalList) {
convertedList.add(Optional.of(object));
}
我试了下面的代码。
List<Optional<Object>> convertedList = originalList.stream().map((o) -> Optional.of(o));
但是,这会产生以下编译错误:
of(T) in Optional cannot be applied to (java.lang.Object)
这是使用java.util.Optional类而不是Guava类。
2条答案
按热度按时间w3nuxt5m1#
您忘记了在列表中收集
Stream
的元素。它应该是:注意,在本例中,您可以避免创建lamba,而使用方法引用
.map(Optional::of)
。我不明白为什么你会得到
Optional
的List
,如果你事先知道列表中的元素是非空的,也许这只是为了练习Java 8,但正如@Eran所说,你应该使用Optional::ofNullable
。s4n0splo2#
看起来您忘记将流收集到列表:
但是应该使用
ofNullable
,因为of
需要一个非空对象(当传递空引用时,它将抛出NullPointerException
)。