Eu tenho uma lista na myListToParse
qual desejo filtrar os elementos e aplicar um método em cada elemento e adicionar o resultado em outra lista myFinalList
.
Com o Java 8, notei que posso fazer isso de duas maneiras diferentes. Gostaria de saber a maneira mais eficiente entre eles e entender por que um caminho é melhor que o outro.
Estou aberto a qualquer sugestão sobre uma terceira via.
Método 1:
myFinalList = new ArrayList<>();
myListToParse.stream()
.filter(elt -> elt != null)
.forEach(elt -> myFinalList.add(doSomething(elt)));
Método 2:
myFinalList = myListToParse.stream()
.filter(elt -> elt != null)
.map(elt -> doSomething(elt))
.collect(Collectors.toList());
elt -> elt != null
pode ser substituído porObjects::nonNull
Optional<T>
em vez disso , use-os em combinação com flatMap
.
.map(this::doSomething)
assumindo que este doSomething
é um método não estático. Se for estático, você pode substituir this
pelo nome da classe.