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

我正在合并多个列表,然后使用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


汪汪一只猫
浏览 90回答 1
1回答

暮色呼如

Stream&nbsp; &nbsp; .of(foo.getList1(), foo.getList2(), foo.getList3())&nbsp; &nbsp; .filter(Objects::nonNull)&nbsp; &nbsp; ....或者正如 Holger 所指出并在flatMapjava-doc 中指定的那样:如果映射流为空,则使用空流。因此,你可以这样做:&nbsp;Stream&nbsp; &nbsp; .of(foo.getList1(), foo.getList2(), foo.getList3())&nbsp; &nbsp; .flatMap(x -> x == null? null : x.stream())
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java