Eu tenho uma lista na myListToParsequal 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 != nullpode 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 thispelo nome da classe.