java - 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
解决方案
您将它们添加为 Integers 并且 java 对 Integer value 有限制2147483647
。如果您通过此最大值,您将从最小值开始计数
Integer.MAX_VALUE + 1 = -2147483648
。