我有一些使用Arrays.stream(int arr [])。sum()添加的整数。它以int返回截断后的总和,而实际总和更大且适合long。为什么流API会通过截断而只返回int而不返回长整数?
尝试使用小整数,例如int myArray [] = {1,5,8}; int sum = Arrays.stream(myArray).sum();
工作正常。
但不适用于其和导致long的更长整数。
下面的情况1可以正常工作并返回14
int myArray[] = { 1, 5, 8 };
int sum = Arrays.stream(myArray).sum();
Run Code Online (Sandbox Code Playgroud)
而方案2无法使用,因为总和超过32位。它给出的总和为-105032716,而预期值为4189934580
int myArray[] = { 2094967290, 2094967290};
int sum = Arrays.stream(myArray).sum();
Run Code Online (Sandbox Code Playgroud)
并获得正确的总和,如果我在下面进行操作,则会得到预期的结果4189934580
long sum = 0L + 2094967290+2094967290;
System.out.println(sum);
Run Code Online (Sandbox Code Playgroud)
这取决于开发人员。您知道会发生什么,正在处理什么数据,更重要的是,您对其进行了测试。我认为,这与我们如何处理any的可能溢出没有什么不同intOne + intTwo。
如果您知道总和将超过int范围,然后切换到长流(感谢卡洛斯Heuberger用于asLongStream()代替mapToLong(i -> i)):
long sum = Arrays.stream(myArray).asLongStream().sum();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |