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

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

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]; } 

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

 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 

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

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

如果你想处理太短的行:

 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(); } 

没有简单的方法。 您必须迭代数组并自己构造列数组。

您应该注意,如果您的2D数组具有不同长度的行,则“列数组”没有很好地定义。 例如,如果第2行只有2列,您将如何创建第3列数组?

如果您的2D数组是一个矩阵(即所有行具有相同的长度),则很容易创建一个2D数组,其行是原始2D数组的列。 然后,您可以轻松获取原始数组的列。

你可以这样做:

 for(int row = 0; row < numRows; row++) { colArray[row] = my2Darray[row][columnOfInterest]; } 

Apache commons有这个工具,检查这个答案 。

这是另一个适用于对象的Java 8答案:

 // Make 2D array of objects Obj[][] obj = {{new Obj(0),new Obj(1)},{new Obj(2),new Obj(3)}}; // To get a row: int rowToGet = 1; Obj[] oRow = obj[rowToGet]; // To get a column: int colToGet = 1; Obj[] oCol = Arrays.stream(obj).map(o -> o[colToGet]).toArray(Obj[]::new); // Print the row: System.out.println(Arrays.toString(oRow)); // Print the column: System.out.println(Arrays.toString(oCol)); // Here is the object used for this example class Obj { int in; String str; public Obj(){}; public Obj(int in){ this.in = in; switch(in){ case 0: str = "zero"; break; case 1: str = "one"; break; case 2: str = "two"; break; case 3: str = "three"; break; } } @Override public String toString(){ return String.format("%d=%s",in,str); } } 

这将产生输出:

Extracted row: [2=two, 3=three]
Extracted col: [1=one, 3=three]