Come posso contare le corrispondenze di un filtro di flusso? Sto cercando di refactoring il seguente codice per java8 stream
:Come contare le corrispondenze su un filtro dello stream?
//java7
int i = 0;
for (Node node : response.getNodes()) {
Integer id = node.getId();
if (id != null) {
node.setContent("This is the id: " + id);
i++;
}
}
//java8
response.getNodes().stream()
.filter(node -> node.getId() != null)
.forEach(node -> node.setValue("This is the id: " + node.getId()));
Come posso ora ottenere il conteggio di elementi filtrati che sono stati applicati? Sidequestion: nel vecchio codice posso riutilizzare lo Integer id
più volte. Come posso ottenere lo stesso con i flussi?
perché non aggiungere una variabile esterna come contatore e aggiungere semplicemente l'operazione di incremento in "forEach"? – nikis
@nikis Questo non funzionerebbe con una variabile locale, perché le variabili catturate dall'ambiente che si utilizza in una lambda devono essere effettivamente definitive. Quindi sarebbe più complicato di quanto pensi. – Jesper
@Jesper @nikis è possibile utilizzare un'istanza 'LongAdder' e continuare a incrementarla. Quella classe è stata aggiunta a Java 8 proprio per questo scopo. – dkatzel