2015-09-26 7 views
6

Da viele Ganzzahlen überlaufen können, wenn summiert wird, brauchte ich einen langen Stream, um den Job zu erledigen, aber es akzeptiert int Array nicht. Wie kann ich jedes Element zum Zeitpunkt des Streams konvertieren, anstatt ein long Array zu verwenden?Java LongStream zum Summieren von int Array-Elementen

// arr is an int[] 
LongStream s = Arrays.stream(arr); // error 
result = s.reduce(0, Long::sum); 

Edit: es scheint, dass Integer-Strom in eine lange ein mit seiner Methode wie in Tagir Valeev Antwort gedreht wird.

LongStream asLongStream();

Antwort

6

Verwenden IntStream.asLongStream() Methode:

LongStream s = Arrays.stream(arr).asLongStream(); 

Im übrigen s.reduce(0, Long::sum) ist die längere Alternative für einfache sum() Methode (die intern das gleiche tut):

long result = Arrays.stream(arr).asLongStream().sum(); 
+0

Dies tut Kopie Array in einem temporären langes Array nehme ich an. Vielen Dank. –

+1

@huseyintugrulbuyukisik, Natürlich kopiert es nicht. –

+0

Wenn ich die parallele Version verwende, berechnet sie zuerst 5ms (16M Elemente), und dann Sekunden später, jede Summe nimmt 15ms plötzlich. Ist das eine Folge einer Müllsammlung? –

Verwandte Themen