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]]
2条答案
按热度按时间11dmarpk1#
您可以使用密钥提取程序和比较器链接:
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
.我们也可以预测
总是会抛出一个
ArrayIndexOutOfBoundsException
因为索引0
至少一个元素中不存在。