在java中对2d数组排序

b09cbbtk  于 2021-07-14  发布在  Java
关注(0)|答案(2)|浏览(473)

我很难弄清楚一行对二维整数数组排序的代码的细节。
正在排序的数组是一个数组,其中的数组只有两个数字,我试图找出 (a, b) 指两个独立的二维数组,如果 (a[0] , b[0]) 指二维数组中的数字?

Arrays.sort(sortedIntervals, (a, b) -> Integer.compare(a[0], b[0]));
11dmarpk

11dmarpk1#

您可以使用密钥提取程序和比较器链接:

int[][] arr2d = {{1, 3, 6}, {1, 2, 3}, {0, 2, 3}};

// sorting the rows of a 2d array first by
// the first column, then by the second column
Arrays.sort(arr2d, Comparator
        .<int[]>comparingInt(row -> row[0])
        .thenComparingInt(row -> row[1]));

System.out.println(Arrays.deepToString(arr2d));
// [[0, 2, 3], [1, 2, 3], [1, 3, 6]]
x7yiwoj4

x7yiwoj42#

arrays.sort(sortedintervals,(a,b)->integer.compare(a[0],b[0]);
如您所见,这里只有一种比较方法: compare(int,int) . 所以呢 a[0] 必须是int(或java.lang.integer,respecievly)。
因为只有一个方法接受lambda作为第二个参数,所以它必须是这个方法。是javadoc sais a 以及 b 是数组的直接元素 sortedIntervals 以及 a 以及 b 必须是整数数组。
所以没有别的选择 sortedIntervals 是一个2dim整数数组。因为我们可以访问a[0]和b[0],所以我们可以期望 sortedIntervals 在他们的第一个位置可以投到 int .
我们也可以预测

int[][] sortedIntervals ={{},{}}; 
int[][] sortedIntervals ={{6},{}}; 
int[][] sortedIntervals ={{},{6}};

总是会抛出一个 ArrayIndexOutOfBoundsException 因为索引 0 至少一个元素中不存在。

相关问题