Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java 2d数组二次排序_Java_Arrays_Sorting_Secondary Sort - Fatal编程技术网

java 2d数组二次排序

java 2d数组二次排序,java,arrays,sorting,secondary-sort,Java,Arrays,Sorting,Secondary Sort,我想对下面的2D数组进行排序,以便每行的第一个索引是升序的,如果在两行中相同,则第二个索引也是升序的。例子: 鉴于: 我希望它是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])); 现在我的想法是把它分解成子数组,对它们进行排序,然后再将它们合并在一起,但我真的想

我想对下面的2D数组进行排序,以便每行的第一个索引是升序的,如果在两行中相同,则第二个索引也是升序的。例子: 鉴于:

我希望它是
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]));

现在我的想法是把它分解成子数组,对它们进行排序,然后再将它们合并在一起,但我真的想知道是否有更好的方法可以做到这一点,我不知道。(甚至可以使用比较器,提前使用thx)

您可以通过使用
然后比较
将第二个比较器添加到第一个比较器,这基本上会导致一种行为,即如果第一个比较器返回相同的结果,则第二个比较器用于打破平衡:

        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]);
        }

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

        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]);
        }

根据您对排序算法的了解程度,我建议您阅读排序数组的不同方法。当涉及到你的问题时,它可能是重复的。虽然你们可能想要一个不同的答案。我在大学里知道一些排序算法,但我们并没有详细讨论这个案例。我也看到了您之前链接的线程,但无法充分利用它,因为他的示例在一个索引中没有重复的内容,他希望在其中对另一个进行排序。我希望我的问题不会重复,这取决于你们对排序算法的了解程度,我建议你们阅读关于数组排序的不同方法。当涉及到你的问题时,它可能是重复的。虽然你们可能想要一个不同的答案。我在大学里知道一些排序算法,但我们并没有详细讨论这个案例。我也看到了您之前链接的线程,但无法充分利用它,因为他的示例在一个索引中没有重复的内容,他希望在其中对另一个进行排序。我希望我的问题不要重复,这句话的语法“first.thenComparing(second)”正是我想要的,非常感谢!解决了这段语法“first.thenComparing(second)”正是我想要的,非常感谢!解决了的
Comparator<int[]> cp = Comparator.<int[]>comparingInt(a -> a[0]).thenComparingInt(a -> a[1]);