Comment calculer le nombre de matchs sur un flux de filtre?

Comment puis-je compter les matches d'un flux de filtre? Je suis en train de refactoriser le code suivant à java8 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()));

Comment puis-je obtenir le nombre d'éléments filtrés qui ont été appliquées?
Sidequestion: dans l'ancien code, je peux réutiliser les Integer id plusieurs fois. Comment puis-je obtenir le même avec des cours d'eau?

pourquoi ne pas ajouter à la variable externe en tant que contre et juste ajouter de l'opération d'incrémentation à la forEach?
Cela ne fonctionnerait pas avec une variable locale, car les variables capturées à partir de l'environnement que vous utilisez dans une lambda doit être effectivement final. Donc, il serait plus difficile que vous le pensez.
vous pouvez utiliser un LongAdder instance et de garder l'incrémentation. Cette catégorie a été ajoutée à Java 8 pour cet effet.
votre commentaire m'a fait prendre un regard plus profond sur Java 8 fonctions, j'ai passé trop de temps à l'extérieur Java uni à la C# LINQ ciel =)

OriginalL'auteur membersound | 2015-03-25