使用比较器比较第一个单元格,然后如果相等,则比较第二个单元格。当流式传输2D 数组时,结果是1D 数组流(在这种情况下长度为2)。然后使用比较器对它们进行排序,然后以2D 数组的形式返回。
int[][] array = {{0, 4}, {1, 3}, {0, 7}, {7, 8}, {1, 2}, {7, 3}};
Comparator<int[]> first = Comparator.comparingInt(a -> a[0]);
Comparator<int[]> second = Comparator.comparingInt(a -> a[1]);
array = Arrays.stream(array)
.sorted(first.thenComparing(second))
.toArray(int[][]::new);
for (int[] a : array) {
System.out.println(Arrays.toString(a));
}
打印
[0, 4]
[0, 7]
[1, 2]
[1, 3]
[7, 3]
[7, 8]
这是一种使用选择排序的非流方法。不过对于大型数据集来说效率不是很高。
for (int i = 0; i < array.length - 1; i++) {
for (int k = i + 1; k < array.length; k++) {
// sort in ascending order on the first cells and then
// if equal, on the second cells
if (array[k][0] > array[i][0]
|| array[k][0] == array[i][0]
&& array[k][1] > array[i][1]) {
// simply swap each 1D array
int[] temp = array[i];
array[i] = array[k];
array[k] = temp;
}
}
}
或如Pshemo 所建议的那样,使用上述比较器。这会在不创建新数组的情况下进行就地排序。
Arrays.sort(array, first.thenComparing(second));