Se ho una lista di nomi di varia lunghezza è uso il metodo forEach
e voglio ottenere tutti i nomi che hanno lunghezza 5, ci sono due modi per farlo:
-
- sconigliato
-
- best practice
Con i stream bisogna sempre scorere gli stream e produre nuove istance come risultato finale.
Non è consigliato scorre gli stream a cambiare lo stato di un istanza definita fuori da essa.
public static void main(String[] args){
List<String> filtrati = new ArrayList<>();
List<String> nomi = Arrays.asList("Pluto", "Paperino");
// metodo sconsigliato
nomi.stream()
.filter(n -> n.length() == 5)
.forEach(n1 -> {
filtrati.add(n1);
});
// metodo best practice
List<String> filtrati2 = nomi.stream()
.filter(n -> n.length() == 4)
.collect(Collectors.toList());
}