Soll ich mehrmals streamen oder alle Berechnungen in einem Stream durchführen?

8

Ich habe den folgenden Code:

%Vor%

Wie Sie sehen können, streame ich die gleiche Liste dreimal, weil ich drei verschiedene Werte finden möchte. Wenn ich das in einer For-Each-Schleife mache, könnte ich nur einmal eine Schleife machen.

Ist es besser, performance weise eine for-Schleife zu machen, so dass ich nur einmal loope? Ich finde die Streams viel besser lesbar.

Bearbeiten: Ich habe einige Tests durchgeführt:

%Vor%

und wie erwartet ist die for-Schleife immer schneller als die streams

%Vor%

Aber nie signifikant.

Das findFirst war wahrscheinlich ein schlechtes Beispiel, weil es nur beendet wird, wenn der Stream leer ist, aber ich wollte wissen, ob es einen Unterschied macht.

Ich hatte gehofft, eine Lösung zu finden, die mehrere Berechnungen aus einem Stream erlaubt. IntSummaryStatistics machen nicht genau was ich will. Ich denke, ich werde @ Florian-Schaetz beachten und bei einer marginalen Leistungssteigerung die Lesbarkeit bevorzugen.

    
Somaiah Kumbera 29.05.2017, 08:25
quelle

1 Antwort

5

Sie durchlaufen die Sammlung nicht dreimal.

%Vor%

Obiges prüft, ob Elemente in der Sammlung vorhanden sind, und gibt einen davon abhängigen Wert zurück. Es muss nicht durch die gesamte Sammlung gehen.

%Vor%

Dieser muss alle Elemente ohne ein Prozessdatum ausfiltern und zählt sie, so dass dieser die gesamte Sammlung durchläuft.

%Vor%

Das obige muss nur durch die Elemente gehen, bis es eine Nachricht mit einem Anhang findet.

Also, von den drei Strömen ist nur einer von ihnen erforderlich, um die gesamte Sammlung zu durchlaufen, im schlimmsten Fall machst du die Iteration zweimal (der zweite und potentiell der dritte) .

Dies könnte wahrscheinlich mit einer normalen For-Each-Schleife effizienter gemacht werden, aber brauchen Sie es wirklich? Wenn Ihre Sammlung nur ein paar Objekte enthält, würde ich mich nicht darum kümmern, sie zu optimieren.

Mit einer traditionellen For-Each-Schleife können Sie jedoch die letzten beiden Streams kombinieren:

%Vor%

Es liegt wirklich an Ihnen, ob Sie das für eine bessere Lösung halten (ich finde auch, dass die Streams besser lesbar sind). Ich sehe keinen Weg, die drei Ströme zu einem Ganzen zu kombinieren, zumindest nicht auf eine lesbarere Weise.

    
Magnilex 29.05.2017, 08:48
quelle

Tags und Links