数组流没有求和

时间:2014-06-06 17:36:16

标签: java

我正在尝试对一个整数数组求和。我从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();

并且编译器给出“找不到符号方法和”。

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

2 个答案:

答案 0 :(得分: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);

由于reduce返回Optional<Integer>我可以使用get()来读取其值,但这样我会冒险

java.util.NoSuchElementException: No value present

如果没有要流式传输的元素(当数组为空时,如new Integer[0])。在这种情况下,最好使用orElse(0),这意味着:返回存储的值,如果没有值则返回0

答案 1 :(得分:0)

Arrays.stream(v)会返回Stream<Integer>,因为vInteger的数组。 sum()没有Stream<T> - 请查看here

如果vint[],那么Arrays.stream(v)会返回sum()您正在寻找的{{1}}方法。

希望这可以澄清正在发生的事情。