我正在合并多个列表,然后使用Stream.of(..)& 然后执行flatMap相同的操作以收集组合列表,如下所示:class Foo{ List<Entity> list1; List<Entity> list2; List<Entity> list3; //getters & setters}Foo foo = getFoo();Predicate<Entity> isExist = //various conditions on foo ;List<Bar> bars = Stream .of(foo.getList1(), foo.getList2(), foo.getList3()) .flatMap(Collection::stream) .filter(isExist) .map(entity -> getBar(entity)) .collect(Collectors.toList());第一个问题:Stream.of(..)检查 nonNull&吗notEmpty?如果 ans 为否,则第二个问题:我怎样才能对我在上面的代码中得到的所有内容执行nonNull¬Empty检查?这样每当这三个列表发生合并时,它基本上都会忽略&来避免?listsfoonullempty listNullPointerException
1 回答
暮色呼如
TA贡献1853条经验 获得超9个赞
Stream
.of(foo.getList1(), foo.getList2(), foo.getList3())
.filter(Objects::nonNull)
....
或者正如 Holger 所指出并在flatMapjava-doc 中指定的那样:
如果映射流为空,则使用空流。
因此,你可以这样做:
Stream
.of(foo.getList1(), foo.getList2(), foo.getList3())
.flatMap(x -> x == null? null : x.stream())
添加回答
举报
0/150
提交
取消