J'ai une liste myListToParseoù 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 != nullpeut être remplacé parObjects::nonNull
Optional<T>place en combinaison avec flatMap.
.map(this::doSomething)supposant qu'il doSomethings'agit d'une méthode non statique. S'il est statique, vous pouvez le remplacer thispar le nom de la classe.