是否有一种方法可以检查java8中的null,如果list为null则返回null,否则执行操作。
public Builder withColors(List<String> colors) {
this.colors= colors== null ? null :
colors.stream()
.filter(Objects::nonNull)
.map(color-> Color.valueOf(color))
.collect(Collectors.toList());
return this;
}
我看到可以使用
Optional.ofNullable(list).map(List::stream)
但是以这种方式,我在Color.valueOf(color)上得到错误代码
谢谢
答案 0 :(得分:2)
Optional.ofNullable(list).map(List::stream)
会给您一个Optional<Stream<String>>
,您无法对其打filter
。
您可以将整个Stream
处理放入Optional
的{{1}}中:
map()
答案 1 :(得分:2)
您可能需要重新考虑几件事。
首先可能要通过Set<String> colors
而不是List
,因为似乎Color
是一个枚举。然后,可能更有意义的是检查equalsIgnoreCase
,以便red
或RED
仍会产生一个枚举实例。同样,if statement
可能更清楚地检查可能为空的输入。最后一个相反方向的流-从enum
开始更有意义(也避免了空检查),为了简单起见,我没有实现上述建议。
public Builder withColors(List<String> colors) {
if(colors == null){
this.colors = Collection.emptyList();
}
this.colors = EnumSet.allOf(Color.class)
.stream()
.filter(x -> colors.stream().anyMatch(y -> x.toString().equals(y)))
.collect(Collectors.toList());
return this;
}