Ich habe eine Liste, myListToParse
in der ich die Elemente filtern, eine Methode auf jedes Element anwenden und das Ergebnis in eine andere Liste einfügen möchte myFinalList
.
Mit Java 8 habe ich festgestellt, dass ich das auf zwei verschiedene Arten tun kann. Ich möchte den effizienteren Weg zwischen ihnen kennen und verstehen, warum ein Weg besser ist als der andere.
Ich bin offen für Vorschläge zu einem dritten Weg.
Methode 1:
myFinalList = new ArrayList<>();
myListToParse.stream()
.filter(elt -> elt != null)
.forEach(elt -> myFinalList.add(doSomething(elt)));
Methode 2:
myFinalList = myListToParse.stream()
.filter(elt -> elt != null)
.map(elt -> doSomething(elt))
.collect(Collectors.toList());
elt -> elt != null
kann aber ersetzt werden durchObjects::nonNull
Optional<T>
stattdessen in Kombination mit zu verwenden flatMap
.
.map(this::doSomething)
Annahme schreiben können, dass doSomething
es sich um eine nicht statische Methode handelt. Wenn es statisch ist, können Sie es durch this
den Klassennamen ersetzen .