2015-09-26 17 views
6

Vì nhiều số nguyên có thể tràn khi tổng hợp, tôi cần một luồng dài để thực hiện công việc nhưng nó sẽ không chấp nhận mảng int. Làm thế nào tôi có thể chuyển đổi từng phần tử tại thời điểm phát trực tuyến thay vì sử dụng mảng long?Java LongStream để tổng hợp các phần tử mảng

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

Edit: có vẻ như dòng số nguyên được biến thành một con đường dài sử dụng phương pháp của nó như trong câu trả lời Tagir Valeev của.

LongStream asLongStream();

Trả lời

6

Sử dụng IntStream.asLongStream() phương pháp:

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

Bằng cách s.reduce(0, Long::sum) là thay thế còn cho phương pháp đơn giản sum() (mà trong nội bộ cũng làm như vậy): mảng copy

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

doesnt này để tạm thời mảng dài tôi cho là. Cảm ơn. –

+1

@huseyintugrulbuyukisik, Tất nhiên nó không sao chép. –

+0

Khi tôi sử dụng phiên bản song song, nó tính toán ở mức 5ms lúc đầu (16M phần tử), sau đó tính bằng giây sau, mỗi lần lấy 15ms đột ngột. Đây có phải là hậu quả của một số bộ sưu tập rác? –

Các vấn đề liên quan