将整数流汇总为Java中的长变量

时间:2018-04-20 19:01:16

标签: java java-8 java-stream

我有一个Java Set,其中包含一些Integer个元素。我想用Java 8流来汇总它的元素。

Set<Integer> numbers = new HashSet<>();
// Some code that will populate numbers
int sum = numbers.stream().mapToInt(Integer::intValue).sum() //Can overflow!

我可以使用上面的代码来获取总和,但numbers的内容是Integer元素,远低于Integer.MAX_VALUE,并且有大量元素使得它们的总和可能溢出。如何将Integer元素流转换为Long元素流并将其安全地汇总?

2 个答案:

答案 0 :(得分:9)

使用mapToLong(Integer::longValue)代替mapToInt(...)

long sum = numbers.stream().mapToLong(Integer::longValue).sum();

答案 1 :(得分:0)

mapToLong方法将是正确使用的方法。它应该避免溢出问题,因为计算完成的时间很长。

long sum=numbers.stream().mapToLong(Number::longValue).sum();