Jak mogę policzyć dopasowania filtra strumienia? Próbuję byłaby następujący kod do java8 stream
:Jak liczyć dopasowania w filtrze strumienia?
//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()));
Jak mogę teraz dostać liczba filtrowanych elementów, które zostały zastosowane? Zapytanie: W starym kodzie mogę wielokrotnie używać Integer id
. Jak mogę osiągnąć to samo w przypadku strumieni?
dlaczego nie dodać zmiennej zewnętrznej jako licznika i po prostu dodać operację przyrostu w 'forEach'? – nikis
@nikis Nie działałoby to ze zmienną lokalną, ponieważ zmienne przechwycone ze środowiska, z którego korzystasz w lambda, muszą być efektywne. Więc byłoby to bardziej kłopotliwe niż myślisz. – Jesper
@Jesper @nikis można użyć instancji 'LongAdder' i dalej ją zwiększać. Ta klasa została dodana do Java 8 tylko w tym celu. – dkatzel