teilen kann ich dies nur ein paar Tage getan habe ; Wir hatten ein sehr großes Array zusammenzufassen und frage mich, was der schnellste Weg wäre, es zu tun - so gemessen I (nicht erraten, ich jmh
benutzt habe):
@State(Scope.Thread)
public static class Holder {
@Param({ "1000", "10000", "50000", "100000", "1000000" })
public int howManyEntries;
int array[] = null;
@Setup
public void setUp() {
array = new int[howManyEntries];
for (int i = 0; i < howManyEntries; ++i) {
array[i] = i;
}
}
@TearDown
public void tearDown() {
array = null;
}
}
@Fork(1)
@Benchmark
public int iterative(Holder holder) {
int total = 0;
for (int i = 0; i < holder.howManyEntries; ++i) {
total += holder.array[i];
}
return total;
}
@Fork(1)
@Benchmark
public int stream(Holder holder) {
return Arrays.stream(holder.array).sum();
}
@Fork(1)
@Benchmark
public int streamParallel(Holder holder) {
return Arrays.stream(holder.array).parallel().sum();
}
Der Gewinner ist immer der alte Stil Java-7-Weg.
// 1000=[iterative, stream, streamParallel]
// 10000=[iterative, stream, streamParallel]
// 50000=[iterative, stream, streamParallel]
// 100000=[iterative, stream, streamParallel]
// 1000000=[iterative, stream, streamParallel]
Sogar für 1 Million Elemente. Aber das Ergebnis unterscheidet sich in bis zu 60 ms - ob das beißt oder nicht, liegt ganz bei Ihnen.
Streams sind nicht für Geschwindigkeit gedacht, sie ersetzen nicht den alten Stil, sie wollen auch nicht - es könnte Ihrem Code zum Beispiel zusätzliche Sichtbarkeit geben.
Danke für die Freigabe. Ich habe die Code-Lesbarkeit verstanden, die von Stream Way bereitgestellt wird. Jetzt, einige Tage, hatte ich die Tendenz, alles im Stream zu schreiben, aber bei einer Introspektion fand ich heraus, dass ich den alten Stil an einem Ort für bessere Performance verwenden sollte. Deshalb suche ich nach wirklichen Leben tun und tun nicht – nantitv
@nantitv Ich bekomme Ihren Schmerz, um ehrlich zu sein; aber der Teil über Code, der besser lesbar ist, ist so groß geworden - ich habe es wirklich schwerer, Pre-Java-8 Code mit Streams zu lesen, dass selbst diese Millisekunden es nicht schaffen ... Das ist natürlich egal (der Geschwindigkeitsverlust), bis es geht - vielleicht ist das, was Sie "getroffen" haben mit ... – Eugene