如何使用Java 8对List <int []>中的值求和

Bre*_*een 21 java lambda

我想找到List<int[]>使用Java 8 的总和.这是我的尝试.

int sum = counts.stream().flatMap(i -> Stream.of(i).mapToInt(m)).sum();
Run Code Online (Sandbox Code Playgroud)

但是,我得到的错误无法转换Stream<Object><unknown>.

War*_*ard 31

您想要flatMap到IntStream.在那之后,拿这笔钱很容易.

int sum = counts.stream()
        .flatMapToInt(IntStream::of)
        .sum();
Run Code Online (Sandbox Code Playgroud)


JB *_*zet 14

int sum = counts.stream().flatMapToInt(array -> IntStream.of(array)).sum();
Run Code Online (Sandbox Code Playgroud)

  • 是的,或IntStream :: of.不过,我发现lambda对于新手来说更加清晰. (6认同)
  • 或者`flatMapToInt(Arrays :: stream)`使用方法引用和`Arrays.stream()`,因为那是`IntStream.of()`在内部调用的. (2认同)

Era*_*ran 7

i是一个原始数组(int[]),所以Stream.of(i)会返回一个Stream<int[]>.

我建议你先计算每个数组的总和,然后总结所有数组:

int sum=counts.stream()
              .mapToInt(ar->IntStream.of(ar).sum()) // convert each int[] to the sum 
                                                    // of that array and transform the
                                                    // Stream to an IntStream
              .sum(); // calculate the total sum
Run Code Online (Sandbox Code Playgroud)

  • 不需要两个map调用:`counts.stream().mapToInt(ar - > IntStream.of(ar).sum()).sum()` (4认同)

Jua*_*oza 5

你可以这样做:

int sum = counts.stream()                               // getting Stream<int[]>
                .mapToInt(a -> Arrays.stream(a).sum())  // getting an IntStream with the sum of every int[]
                .sum();                                 // getting the total sum of all values.
Run Code Online (Sandbox Code Playgroud)