从java中的二维数组中获取列

Ped*_*lez 1 java multidimensional-array

在二维数组中,我可以轻松获取行的数组,如何将列作为数组?我需要一个适用于对象的解决方案,而不仅仅是原语.谢谢

        int counter = 1;
    int[][] matrix = new int[9][9];

    for (int x = 0; x < matrix.length; x++) {
        for (int y = 0; y < matrix[0].length; y++) {
            matrix[x][y] = counter;
            System.out.print(counter + " ");
            counter++;
        }
        System.out.println();
    }

    for (int x = 0; x < matrix.length; x++) {
        int[] row = matrix[x];  
    }
Run Code Online (Sandbox Code Playgroud)

spr*_*ter 6

这是一个使用 Java 8 流的方法:

int[] getColumn(int[][] matrix, int column) {
    return IntStream.range(0, matrix.length)
        .map(i -> matrix[i][column]).toArray();
}
Run Code Online (Sandbox Code Playgroud)

如果你想处理太短的行:

int[] getColumn(int[][] matrix, int column, int defaultVal) {
    return IntStream.range(0, matrix.length)
        .map(i -> matrix[i].length < column ? defaultVal : matrix[i][column])
        .toArray();
}
Run Code Online (Sandbox Code Playgroud)


Eri*_*uth 5

没有"开箱即用"的方式,但你可以为此创建一个静态方法:

public static Object[] getColumn(Object[][] array, int index){
    Object[] column = new Object[array[0].length]; // Here I assume a rectangular 2D array! 
    for(int i=0; i<column.length; i++){
       column[i] = array[i][index];
    }
    return column;
}
Run Code Online (Sandbox Code Playgroud)