Как объединить несколько списков, используя плоскую карту с нулевой и пустой проверкой в ​​Java 8? - PullRequest
3 голосов
/ 15 мая 2019

Я объединяю несколько списков, используя 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 проверки для всех lists, которые я получаю от foo в приведенном выше коде? Так что, когда происходит слияние всех этих трех списков, оно в основном игнорирует null & empty list, чтобы избежать NullPointerException?

1 Ответ

5 голосов
/ 15 мая 2019
 Stream
    .of(foo.getList1(), foo.getList2(), foo.getList3())
    .filter(Objects::nonNull)
    ....

Или, как указано Хольгером и указано в flatMap java-doc:

Если сопоставленный поток равен нулю, вместо него используется пустой поток.

Таким образом, вы можете сделать:

 Stream
    .of(foo.getList1(), foo.getList2(), foo.getList3())
    .flatMap(x -> x == null? null : x.stream())
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...