2015-09-26 12 views
6

合計で整数がオーバーフローする可能性があるため、ジョブを実行するには長いストリームが必要でしたが、int配列を受け入れません。 long配列を使用する代わりに、ストリーミング時に各要素をどのように変換できますか?JavaのLongStreamで配列要素を合計する

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

編集:整数ストリームがTagir Valeevの答えのようにそのメソッドを使用して長いものになっていることが表示されます。

LongStream asLongStream();

答えて

6

使用IntStream.asLongStream()方法:ところでs.reduce(0, Long::sum)ことで

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

が(内部的に同じことを)簡単なsum()メソッドの長い代替です:

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

一時的にこのdoesntのコピー配列私が想定している長い配列。ありがとう。 –

+1

@huseyintugrulbuyukisik、もちろんコピーしません。 –

+0

パラレルバージョンを使用すると、最初は5ms(16M要素)で計算され、その後、各合計は突然15msかかる。これはガベージコレクションの結果ですか? –

関連する問題