Comment travailler avec des flux Java 8?
Je veux savoir comment travailler avec Java 8
ruisseaux et comment utiliser les différents types de disposition flux des opérations.
Par exemple, j'ai écrit cette partie du code:
ArrayList<State> toBeRemoved = new ArrayList<>();
for (State s : newStates)
if (path.contains(s)) // path is a stack of State
toBeRemoved.add(s);
for (State s : toBeRemoved)
newStates.remove(s);
Je veux le réécrire en utilisant java 8 stream api calls
. Comment puis-je le faire?
2 answers
Pas besoin d'un flux ici, vous pouvez utiliser nouveaux Collection#removeIf
méthode:
newStates.removeIf(path::contains);
Ou, si path
est un Collection
:
newStates.removeAll(path);
Dans ce cas, vous pouvez simplement produire une liste de sortie contenant uniquement les États qui doivent être conservés, et affecter cette liste à la variable newStates
:
newStates = newStates.stream()
.filter(s -> !path.contains(s))
.collect(Collectors.toList());
Le filtre ne conserve que les États pour lesquels path.contains(s)
renvoie false.
Bien sûr, si newStates
est initialisé à l'origine en tant que copie d'une liste "oldStates", vous pouvez ignorer cette étape d'initialisation et utiliser la liste "oldStates" d'origine comme entrée.