Попробуйте это.
int values[][] = new int[][] { { 1, 2
}, { 3, 4
}, { 5, 6
}
};
int[] v = Arrays.stream(values).reduce(new int[] { 0, 0
}, (a, b) ->
{
a[0] += b[0];
a[1] += b[1];
return a;
});
System.out.println(Arrays.toString(v));
РЕДАКТИРОВАТЬ:
Относительно вашего другого вопроса о размещении различного количества столбцов. Да, ты можешь сделать это. Но только потому, что вы можете, не означает, что вы должны или что это лучший способ. Далее следует простой метод, который суммирует целые числа в любом двумерном массиве независимо от длины строки. Он даже обрабатывает рваные массивы. Обратите внимание, что это суммирует столбцы «первым пришел - первым обслужен», так как они обрабатываются так, как будто они выровнены по левому краю относительно друг друга.
Инициализируйте неправильный (рваный или разной длины строки) массив
int values[][] = new int[][] { { 1
}, { 20, 3
}, { 1, 2, 4
}, { 3, 4, 10
}, { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
}
};
Теперь вычислите сумму, используя следующий метод.
public static int[] sumColumns(int[][] vals) {
// compute the maximum row length (most columns)
int maxColumns = 0;
for (int r = 0; r < vals.length; r++) {
maxColumns = Math.max(maxColumns, vals[r].length);
}
// use that to initialize the return array
int[] sums = new int[maxColumns];
//now just iterate over the rows and columns
// calculating the sum.
for (int r = 0; r < vals.length; r++) {
for (int c = 0; c < vals[r].length; c++) {
sums[c] += vals[r][c];
}
}
return sums;
}
Чтобы сделать любую прямоугольную матрицу с потоками, сделайте следующее:
int[] result2 =
Arrays.stream(values).reduce(new int[values[0].length], (a, b) ->
{
for (int i = 0; i < values[0].length; ++i) {
a[i] += b[i];
}
return a;
});