如何解决尝试对大数求和时,Stream api reduce 方法返回负值
我正在尝试使用流 api reduce 方法对列表中的数字求和。它为较小的数字提供正确的结果。但是当我给出更大的数字时,它会返回一个不正确的负数。
这是我的代码
public void sumOfNum(List<Integer> numbers) {
long result = numbers.stream().reduce(0,(a,b) -> a + b);
System.out.print(result);
}
测试用例 1(通过)
输入
12345、2343、4324、2323、24234
45569
测试用例 2(失败)
输入
256741038、623958417、623958417、714532089、714532089
-1361245246
解决方法
您将它们添加为整数,而 java 对整数值 2147483647
有限制。
如果您传递此最大值,您将从最小值开始计数
Integer.MAX_VALUE + 1 = -2147483648
。
您正在使用当前代码执行 Integer
加法。我的假设是您知道可能发生的数字溢出,这就是 long
类型为 result
的原因。一旦您将流的值 map
到 Long
,然后再对它们求和,事情就会就位。
long result = numbers.stream()
.map(Long::valueOf)
.reduce(0L,Long::sum);
或者简单地说:
long result = numbers.stream()
.mapToLong(val -> val)
.sum();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。