数组流没有求和

Cel*_*tas 0 java

我试图总结一个整数数组.我从这个问题中解决了@ZouZou的解决方案,无法让它发挥作用

int [] arr = {1,2,3,4};
int sum = Arrays.stream(arr).sum(); //prints 10
Run Code Online (Sandbox Code Playgroud)

我有

public static void proc(Integer[] v) {
    int sum = Arrays.stream(v).sum();
Run Code Online (Sandbox Code Playgroud)

并且编译器给出"找不到符号方法和".

问题是什么?这样做是否比用循环求和更快?

Psh*_*emo 5

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);
Run Code Online (Sandbox Code Playgroud)

由于reduce回报Optional<Integer>我可以get()用来读取它的价值,但这样我就冒险了

java.util.NoSuchElementException: No value present
Run Code Online (Sandbox Code Playgroud)

如果没有要流的元素(当数组为空时new Integer[0]).在这种情况下,最好使用orElse(0)哪种方法:返回存储值或0没有值.