Como mesclar lista múltipla usando mapa plano com nulo e verificação vazia em java 8?

AshwinK:

Eu estou fundindo lista múltipla usando Stream.of(..)e, em seguida, executar flatMapno mesmo para recolher a lista combinada como abaixo:

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());

Primeira pergunta :

Faz Stream.of(..)verificações nonNull& notEmpty? Se ans é Sem então,

Segunda pergunta :

Como posso executar o nonNull& notEmptyverificações em toda a listsEu estou recebendo a partir foodo código acima? Assim que sempre fusão de todos estes três lista de acontecer, vai basicamente ignorar o null& empty listpara evitar NullPointerException?

Eugene:
 Stream
    .of(foo.getList1(), foo.getList2(), foo.getList3())
    .filter(Objects::nonNull)
    ....

Ou, como apontado por Holger e especificado no flatMapjava-doc:

Se um fluxo mapeado é nula uma corrente de vazio é utilizado, em vez disso.

Assim, você pode fazer:

 Stream
    .of(foo.getList1(), foo.getList2(), foo.getList3())
    .flatMap(x -> x == null? null : x.stream())

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=202198&siteId=1
Recomendado
Clasificación