J'ai une liste myListToParse
où je veux filtrer les éléments et appliquer une méthode sur chaque élément, et ajouter le résultat dans une autre liste myFinalList
.
Avec Java 8, j'ai remarqué que je peux le faire de 2 manières différentes. J'aimerais connaître le moyen le plus efficace entre eux et comprendre pourquoi un moyen est meilleur que l'autre.
Je suis ouvert à toute suggestion concernant une troisième voie.
Méthode 1:
myFinalList = new ArrayList<>();
myListToParse.stream()
.filter(elt -> elt != null)
.forEach(elt -> myFinalList.add(doSomething(elt)));
Méthode 2:
myFinalList = myListToParse.stream()
.filter(elt -> elt != null)
.map(elt -> doSomething(elt))
.collect(Collectors.toList());
elt -> elt != null
peut être remplacé parObjects::nonNull
Optional<T>
place en combinaison avec flatMap
.
.map(this::doSomething)
supposant qu'il doSomething
s'agit d'une méthode non statique. S'il est statique, vous pouvez le remplacer this
par le nom de la classe.