为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 java 8 中使用带有 null 和空检查的平面图合并多个列表?

如何在 java 8 中使用带有 null 和空检查的平面图合并多个列表?

汪汪一只猫 2022-11-30 13:23:42
我正在合并多个列表,然后使用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&notEmpty检查?这样每当这三个列表发生合并时,它基本上都会忽略&来避免?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())


查看完整回答
反对 回复 2022-11-30
  • 1 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信