按第一列然后按第二列对二维数组进行排序

时间:2021-01-29 03:08:34

标签: java arrays sorting multidimensional-array

int[][] arrs = {{1, 100}, {11, 22}, {1, 11}, {2, 12}};
Arrays.sort(arrs, (a, b) -> (a[0] - b[0]));

以上数组已排序为

{1, 100}
{1, 11}
{2, 12}
{11, 22}

我希望它们首先按 a[0]-b[0] 排序,如果 a[0]=b[0],然后按 a[1]-b[1] 排序。

{1, 11}
{1, 100}
{2, 12}
{11, 22}

怎么做?

2 个答案:

答案 0 :(得分:4)

本质上您想要做的是比较内部数组 lexicographically(就像单词在字典中的排序方式)。 Arrays.compare 正是这样做的。

Arrays.sort(arrs, Arrays::compare);

答案 1 :(得分:1)

您可以使用一连串的比较器,如下所示:

int[][] arrs = {{1, 100}, {11, 22}, {1, 11}, {2, 12}};

Arrays.sort(arrs, Comparator
        .<int[]>comparingInt(arr -> arr[0]).thenComparing(arr -> arr[1]));

Arrays.stream(arrs).map(Arrays::toString).forEach(System.out::println);

输出:

[1, 11]
[1, 100]
[2, 12]
[11, 22]

另见:Sorting a 2d array in ascending order