按照第一列和第二列排序二维数组

4
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个回答

6

你希望做的事情本质上是比较内部数组 按字典顺序排列 (就像字典中单词的排序方式一样)。 Arrays.compare 正好可以做到这一点。

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

3
您可以使用如下的比较器链:
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]

另请参阅:按升序排序2d数组


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接