我正在尝试对整数数组求和。我从this question红色@ZouZou的解决方案并且无法让它工作
int [] arr = {1,2,3,4};
int sum = Arrays.stream(arr).sum(); //prints 10
我有
public static void proc(Integer[] v) {
int sum = Arrays.stream(v).sum();
编译器给出“找不到符号方法和”。
有什么问题吗?这样做比用循环求和更快吗?
最佳答案
Arrays.stream
有很少的重载版本。
Arrays.stream(int[] arr)
返回IntStream
其中有sum
方法
同时
Arrays.stream(T[] arr)
返回Stream<T>
(其中 T
是通用的)没有 sum
方法。
由于您正在使用Integer[]
作为参数Arrays.stream(T[] arr)
被调用,这就是编译器通知您缺少 sum
的原因方法。
您可以在此处执行的操作是将使用的类型更改为 int[]
或使用类似的东西
int sum = Arrays.stream(v).reduce(Integer::sum).orElse(0);
自 reduce
返回Optional<Integer>
我可以使用get()
读取它的值(value),但这样我就会冒险
java.util.NoSuchElementException: No value present
如果没有元素可以流式传输(当数组为空时,如 new Integer[0]
)。在这种情况下,最好使用 orElse(0)
这意味着:返回存储的值或 0
如果没有值。
关于java - 数组流不求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24087646/