Come lavorare con Java 8 stream?
Voglio sapere come lavorare con Java 8
flussi e come utilizzare il diverso tipo di operazioni di flusso disponibili.
Ad esempio, ho scritto questa parte del codice:
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);
Voglio riscriverlo usando java 8 stream api calls
. Come posso farlo?
2 answers
Non c'è bisogno di un flusso qui, è possibile utilizzare il nuovo Collection#removeIf
metodo :
newStates.removeIf(path::contains);
Oppure, se path
è un Collection
:
newStates.removeAll(path);
In questo caso, puoi semplicemente produrre un elenco di output contenente solo gli Stati che dovrebbero essere mantenuti e assegnare tale elenco alla variabile newStates
:
newStates = newStates.stream()
.filter(s -> !path.contains(s))
.collect(Collectors.toList());
Il filtro mantiene solo gli Stati per i quali path.contains(s)
restituisce false.
Naturalmente, se newStates
è originariamente inizializzato come una copia di alcuni "oldStates" Lista, è possibile saltare quel passaggio di inizializzazione e utilizzare l'originale "oldStates" Lista come input.