2015-09-26 5 views
6

Ponieważ wiele liczb całkowitych może przepełnić się po zsumowaniu, potrzebowałem długiego strumienia do wykonania zadania, ale nie zaakceptuje tablicy int. Jak mogę przekonwertować każdy element w czasie przesyłania strumieniowego, zamiast korzystać z tablicy long?Java LongStream do sumowania elementów tablicy int

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

Edytuj: wygląda na to, że strumień całkowity zamieniany jest na długi, używając jego metody, jak w odpowiedzi Tagira Valeeva.

LongStream asLongStream();

Odpowiedz

6

Zastosowanie IntStream.asLongStream() Metoda:

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

drogą s.reduce(0, Long::sum) jest dłuższy alternatywą dla zwykłego sum() metodą (i wewnętrznie nie taka sama):

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

to robi kopię tablicy do tymczasowego długa tablica, jak sądzę. Dzięki. –

+1

@huseyintugrulbuyukisik, Oczywiście, że nie kopiuje. –

+0

Kiedy używam wersji równoległej, oblicza ona początkowo 5ms (16M elementów), a następnie w kilka sekund później każda suma zabiera nagle 15 ms. Czy jest to konsekwencja niektórych śmieci? –