Wie zählen Sie Übereinstimmungen in einem Stream-Filter?

9

Wie kann ich die Übereinstimmungen eines Stream-Filters zählen? Ich versuche, den folgenden Code zu java8 stream zu refaktorieren:

%Vor%

Wie kann ich jetzt die Anzahl der gefilterten Elemente ermitteln, die angewendet wurden? Sidequestion: Im alten Code kann ich das Integer id mehrmals verwenden. Wie kann ich das Gleiche mit Streams erreichen?

    
membersound 25.03.2015, 15:45
quelle

1 Antwort

17

Da setValue eine Nebeneffektfunktion ist, können Sie peek :

verwenden %Vor%

Ich bin kein Fan dieses Ansatzes, da peak zum Zweck der Fehlersuche verwendet werden soll (dies würde den Trick bewirken). Beachten Sie, dass count() in Java 9 möglicherweise die Stream-Pipeline nicht ausführen kann, wenn sie die Anzahl direkt aus der Quelle berechnen kann (ich glaube nicht, dass dies hier der Fall ist, da Sie eine Filterung anwenden, aber es gut ist, sie zu behalten) im Hinterkopf).

  

Sidequestion: Im alten Code kann ich das Integer id multiple wiederverwenden   mal. Wie kann ich das Gleiche mit Streams erreichen?

Es hängt von Ihrem Anwendungsfall ab, da die API keine Tupel hat, ist Ihre beste Chance, eine Klasse zu erstellen, sagen wir Tuple2 , so dass Sie jeden Knoten einem neuen Tupel zuordnen und die ID wiederverwenden können.

Etwas wie:

%Vor%

In Ihrem Fall, wenn Sie mit einem Strom von Knoten bleiben, können Sie einfach die ID mit getId() jederzeit greifen.

    
Alexis C. 25.03.2015, 15:49
quelle

Tags und Links