使用Java 8流查找数组中对角线元素的总和

时间:2018-10-09 16:20:48

标签: java java-8 java-stream

需要使用Java 8流找到各个对角线元素的和。

2d Array - { 
             { 1, 2, 3 },
             { 5, 6, 7 },
             { 8, 2, 3 }
           }

Output - Sum1 (1+6+3) = 10
         Sum2 (3+6+8) = 17

我知道通过循环数组来做到这一点。可以使用Java 8流完成此操作吗?如果是,怎么办?

1 个答案:

答案 0 :(得分:3)

如果您创建数组的索引的IntStream,将每个索引映射到所需对角线的元素,然后对所得的IntStream求和,则可以轻松完成此操作:

public static void diagonalSums ()
{
    int[][] arr = {{1, 2, 3},
                   {5, 6, 7},
                   {8, 2, 3}};
    System.out.println("first " + IntStream.range(0,arr.length).map(i -> arr[i][i]).sum());
    System.out.println("second " + IntStream.range(0,arr.length).map(i -> arr[i][arr.length-1-i]).sum());
}

输出:

first 10
second 17