Java IntStream对2D数组求和

Java IntStream对2D数组求和,java,arrays,java-8,Java,Arrays,Java 8,使用IntStream对2D数组中的一系列元素求和的语法是什么 对于1D数组,我使用以下语法: int totalElementsInArray = 0; totalElementsInarray = IntStream.of(myArray).sum(); 例如,假设我有一个2D数组: int[][] my2DArray = new int[17][4]; 使用IntStream对第0行的第0-16列求和时的语法是什么 int totalElementsInArray = 0; tot

使用IntStream对2D数组中的一系列元素求和的语法是什么

对于1D数组,我使用以下语法:

int totalElementsInArray = 0;

totalElementsInarray = IntStream.of(myArray).sum();
例如,假设我有一个2D数组:

int[][] my2DArray = new int[17][4];
使用IntStream对第0行的第0-16列求和时的语法是什么

int totalElementsInArray = 0;

totalElementsInarray = IntStream.of(my2DArray[0 through 16][0]).sum();

你可以这样做

IntStream.range(0, 17)
         .map(i -> my2DArray[i][0])
         .sum();

您只需通过获取第一个元素将每个子数组映射到
int

import java.util.*;
import java.util.stream.*; 

class Test {
    public static void main(String args[]) {
        int[][] data = {
            { 1, 2, 3 },
            { 4, 5, 6 }
        };

        int sum = Arrays.stream(data)
                        .mapToInt(arr -> arr[0])
                        .sum();
        System.out.println(sum); // 5, i.e. data[0][0] + data[1][0]
    } 
}
换言之:

  • 数据
    转换为
    (即简单
    int
    数组流)
  • 将每个数组映射到它的第一个元素,这样我们就得到了一个
    IntStream
  • 把那条小溪加起来

我更喜欢这种方法,而不是使用代码>范围< /代码>,因为似乎不需要考虑子数组的索引。例如,如果您只有一个

iterays
,您仍然可以使用
StreamSupport.stream(arrays.spliterator(),false).mapToInt(arr->arr[0]).sum()
,而范围方法需要多次迭代。

一种方法是在索引上创建
IntStream

IntStream.range(0, my2DArray.length).map(i -> my2DArray[i][0]).sum();
或者只保留以下结果的第一行:


再加上你将一个不同问题的精彩答案转换成这个问题的精彩答案的速度<代码>Iterable没有
方法,但。。。
Arrays.stream(my2DArray).mapToInt(a -> a[0]).sum();