Вы можете использовать два простых цикла for
, перебирающих массивы и создающих новый:
int[][] reversed = new int[array.length][];
for (int i = 0; i < array.length; i++) {
int[] row = array[array.length - i - 1];
reversed[i] = new int[row.length];
for (int j = 0; j < row.length; j++) {
reversed[i][j] = row[row.length - j - 1];
}
}
С Java Streams вы можете использовать это, что делает то же самое:
int[][] reversed = IntStream.rangeClosed(1, array.length)
.mapToObj(i -> array[array.length - i])
.map(row -> IntStream.rangeClosed(1, row.length)
.map(i -> row[row.length - i])
.toArray())
.toArray(int[][]::new);
Для входного массива, который вы показали:
int[][] array = {{1, 2, 3}, {7, 8, 6}, {3, 2, 1, 0}};
Результат с обоими решениями будет таким:
[[0, 1, 2, 3], [6, 8, 7], [3, 2, 1]]