java - 数组流不求和

标签 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();

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

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

最佳答案

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/

相关文章:

Java - 突破 JPanel 的限制

java - 当线程被本质锁阻塞时执行代码

java - 解码 UTF-16 文本

java - 错误 :(27, 0) android studio 错误

java - 如何将jsp文本框值保存到java类文件中?

java - ResultSet getObject(int, class) 与反射

java - 核心连接数必须为正误差

java - Spring Web App - 简单的 JDBC 模板建议?

java - 我们什么时候使用静态和动态类加载?

java - 为什么用户输入的 double 不接受与常规 double 相同的参数?