我正在尝试对一个整数数组求和。我从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();
并且编译器给出“找不到符号方法和”。
有什么问题?这样做是否比用循环求和更快?
答案 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>
,因为v
是Integer
的数组。 sum()
没有Stream<T>
- 请查看here。
如果v
为int[]
,那么Arrays.stream(v)
会返回sum()
您正在寻找的{{1}}方法。
希望这可以澄清正在发生的事情。