java 二维数组二次​​排序

标签 java arrays sorting secondary-sort

我想对以下二维数组进行排序,以便每行的第一个索引按升序排序,如果两行中的第一个索引相同,则第二个索引也按升序排序。例子: 给定:

int[][] arr = new int[][]{{2,5},{2,3},{2,1},{2,4},{2,2},{1,2},{1,1},{1,4},{1,3},{1,5}};

我希望它是 arr = {{1,1},{1,2},{1,3},{1,4},{1,5},{2,1}, {2,2}、{2,3}、{2,4}、{2,5}};

它对我来说可以使用以下方法按第一个索引进行排序:

Arrays.sort(arr, Comparator.comparingInt(arr -> arr[0]));

现在我的想法是将其切成子数组,对它们进行排序并将它们合并在一起,但我真的想知道是否有更好的方法来做到这一点,我不知道。 (甚至可能使用比较器,提前谢谢)

最佳答案

您可以使用 thenComparing 将第二个比较器添加到第一个比较器,这基本上会导致一种行为:如果第一个比较器返回相等的结果,则使用第二个比较器来打破平局:

        int[][] arr2 = new int[][]{{2,5},{2,3},{2,1},{2,4},{2,2},{1,2},{1,1},{1,4},{1,3},{1,5}};

        Comparator<int[]> first = Comparator.comparingInt(a -> a[0]);
        Comparator<int[]> second = Comparator.comparingInt(a -> a[1]);

        Arrays.sort(arr2, first.thenComparing(second));

        for(int i = 0; i< arr2.length; i++){
            System.out.println(arr2[i][0] + "," + arr2[i][1]);
        }

还可以使用 thenComparingInt 创建更简洁的比较器版本:

Comparator<int[]> cp = Comparator.<int[]>comparingInt(a -> a[0]).thenComparingInt(a -> a[1]);

关于java 二维数组二次​​排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61088049/

相关文章:

java - Android通知推送空使用GCM和java与json消息

javascript - 值没有插入到数组中

python - NumPy 的 transpose() 方法如何置换数组的轴?

java - 对取对数空间的快速排序的混淆

bash - 按字段对文件内容进行数字排序

javascript - 分组数字 JS 算法

java - 尝试使用jsp获取url内容时发现错误302

java - 使用 AWS IAM 或 Cognito 的 Spring Security

java - Drive API java 应用程序的稳定性

java - 为什么 java.util.Stack 不使用 LinkedList 的复合模式,而是使用 Vektor?