2015-09-26 92 views
6

因爲許多整數在求和時可能會溢出,所以我需要一個很長的流才能完成這項工作,但它不會接受int數組。如何在流式傳輸時轉換每個元素,而不是使用long陣列?Java LongStream來總結int數組元素

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

編輯:看起來,整數流變成一個長的使用其方法在Tagir瓦列耶夫的答案變成一個長。

LongStream asLongStream();

回答

6

使用IntStream.asLongStream()方法:

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

順便說s.reduce(0, Long::sum)爲簡單sum()方法較長替代(其內部不相同):

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

這並不拷貝陣列到臨時我猜想有很長的陣列。謝謝。 –

+1

@huseyintugrulbuyukisik,當然它不會複製。 –

+0

當我使用並行版本時,它首先計算5ms(16M元素),然後在幾秒鐘後,每個總和突然花費15ms。這是垃圾收集的結果嗎? –