以下代码将对象列表转换为可选对象列表.使用Java 8的流有没有一种优雅的方法呢?
List<Object> originalList = Arrays.asList(new Object(), new Object());
List<Optional<Object>> convertedList = new ArrayList<>();
for (Object object : originalList) {
convertedList.add(Optional.of(object));
}
Run Code Online (Sandbox Code Playgroud)
我尝试了下面这段代码.
List<Optional<Object>> convertedList = originalList.stream().map((o) -> Optional.of(o));
Run Code Online (Sandbox Code Playgroud)
但是,这会产生以下编译错误:
of(T) in Optional cannot be applied to (java.lang.Object)
Run Code Online (Sandbox Code Playgroud)
这是使用java.util.Optional类而不是Guava类.
你忘了收集Stream列表中的元素.它应该是:
List<Optional<Object>> convertedList = originalList.stream()
.map((o) -> Optional.of(o))
.collect(Collectors.toList());
//or .collect(Collectors.toCollection(LinkedList::new)); if you want a specific List implementation
Run Code Online (Sandbox Code Playgroud)
请注意,您可以避免创建lamdba并在此情况下使用方法引用.map(Optional::of).
我不明白为什么你会得到List的Optional,如果你事先知道在列表中的元素非空.也许只是为了实践Java 8,但正如@Eran所说,你应该使用它Optional::ofNullable.
您似乎忘了将Stream收集到列表中:
List<Optional<Object>> convertedList =
originalList.stream()
.map((o) -> Optional.ofNullable(o))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
您应该使用ofNullable,因为of需要一个非null对象(它将NullPointerException在传递空引用时抛出).
| 归档时间: |
|
| 查看次数: |
7051 次 |
| 最近记录: |