Java 我只关心子数组中的第一项,现在你说如果第一项相等,你也要关心第二项。。。实现这一点的方法不应该是obivous吗?将第一个[0]与第二个[0]进行比较。如果结果不是0,则返回比较结果。但是,如果结果为0,请将first[1]与second[1]进行比较,并

Java 我只关心子数组中的第一项,现在你说如果第一项相等,你也要关心第二项。。。实现这一点的方法不应该是obivous吗?将第一个[0]与第二个[0]进行比较。如果结果不是0,则返回比较结果。但是,如果结果为0,请将first[1]与second[1]进行比较,并,java,arrays,Java,Arrays,我只关心子数组中的第一项,现在你说如果第一项相等,你也要关心第二项。。。实现这一点的方法不应该是obivous吗?将第一个[0]与第二个[0]进行比较。如果结果不是0,则返回比较结果。但是,如果结果为0,请将first[1]与second[1]进行比较,并返回其他比较的结果。您需要首先了解这些“2D数组”在内存中的表示方式。然后你很快就会看到错误。我们可以像这样直接对2d数组排序吗?@minigeek取决于你的意思。不,这个答案不能用于任何类型的2D数组。@汤姆,你能进一步解释一下你的评论吗?据



我只关心子数组中的第一项,现在你说如果第一项相等,你也要关心第二项。。。实现这一点的方法不应该是obivous吗?将
第一个[0]
第二个[0]
进行比较。如果结果不是0,则返回比较结果。但是,如果结果为0,请将
first[1]
second[1]
进行比较,并返回其他比较的结果。您需要首先了解这些“2D数组”在内存中的表示方式。然后你很快就会看到错误。我们可以像这样直接对2d数组排序吗?@minigeek取决于你的意思。不,这个答案不能用于任何类型的2D数组。@汤姆,你能进一步解释一下你的评论吗?据我所知,这适用于所有的2D数组。@ Sp打印机将工作,是的,但它不会考虑其他列比前两个。例如,如果您有一个3x3阵列。您的代码对前两列进行排序,但如果前两列的值相等,则第三列可能显示为“无序”。@Tom Ok so“不能用于任何类型的2D数组”表示“不会自动按无限个元素进行排序”。明白了。我们能像这样直接对2d数组排序吗?@minigeek取决于你的意思。不,这个答案不能用于任何类型的2D数组。@汤姆,你能进一步解释一下你的评论吗?据我所知,这适用于所有的2D数组。@ Sp打印机将工作,是的,但它不会考虑其他列比前两个。例如,如果您有一个3x3阵列。您的代码对前两列进行排序,但如果前两列的值相等,则第三列可能显示为“无序”。@Tom Ok so“不能用于任何类型的2D数组”表示“不会自动按无限个元素进行排序”。明白了。他不想独立地对两列进行排序,他想要的是按多个标准进行排序(先按第一列排序,然后按第二列排序)。现在的问题是如何解释OPs问题。您的答案断开了“左”和“右”的连接,但如果“左”相等,也可以保持连接并重新排序“右”。我想知道OP到底想要什么。@Tom是的,我想我可能误解了,我会把答案留给发起者,直到发起者评论这个答案没有坏处,但我会加强它,以显示您方法的不同结果。(即,在“右”列中具有不同值的起始数组ilke
{Josef”,“up”},{Josef”,“region”},{“zeta”,“local”},{“zeta”,“cool”},{“root”,“doen”},{“root”,“bat”}
),所以OP(和其他)你可以看到你的方法会产生一个不同于卡雷格斯方法的结果。他不想独立地对两列进行排序,他想要的是按多个标准进行排序(先按第一列,后按第二列)。现在的问题是如何解释OPs问题。您的答案断开了“左”和“右”的连接,但如果“左”相等,也可以保持连接并重新排序“右”。我想知道OP到底想要什么。@Tom是的,我想我可能误解了,我会把答案留给发起者,直到发起者评论这个答案没有坏处,但我会加强它,以显示您方法的不同结果。(也就是说,有一个起始数组ilke
{Josef”,“up”},{Josef”,“region”},{zeta”,“local”},{zeta”,“cool”},{root”,“doen”},{root”,“bat”}
,在“right”列中有不同的值),所以OP(和其他人)可以看出您的方法将产生与例如KarelGs方法不同的结果。
public class SortColl {
public static void main(String args[]){
 String[][] multi = new String [][]{
                    {"Josef", "cool"},
                    {"Josef", "bat"},
                    {"zeta", "doen"},
                    {"zeta", "up"},
                    {"root", "local"},
                    {"root", "region"}
     };

Arrays.sort(multi, new Comparator<String[]>(){
    @Override
    public int compare(String[] first, String[] second){
         final String time1 = first[0];
         final String time2 = second[0];
        return time1.compareTo(time2);
    }

});

for (int i=0; i< multi.length; i++){
    String[] row = multi[i];
    for(int j=0; j<row.length;j++){
        System.out.println(" , " + row[j] );
    }

}
}
{"Josef", "bat"},
{"Josef", "cool"},
{"root", "local"},
{"root", "region"}                  
{"zeta", "doen"},                   
{"zeta", "up"}, 
 String[][] multi = new String [][]{
     {"Josef", "cool"},
     {"Josef", "bat"},
     {"zeta", "doen"},
     {"zeta", "up"},
     {"root", "local"},
     {"root", "region"}
 };

 String [] left = new String[multi.length]; 
 for (int i = 0; i < multi.length; i++) {
     left[i] = multi[i][0];
 }
 Arrays.sort(left);

 String [] right = new String[multi.length]; 
 for (int i = 0; i < multi.length; i++) {
     right[i] = multi[i][1];
 }
 Arrays.sort(right);

 for (int i = 0; i < multi.length; i++) {
     multi[i][0] = left[i];
     multi[i][1] = right[i];
 }
private Comparator<String[]> byElement(int i) {
    return Comparator.comparing(a -> a[i]);
}

Arrays.sort(multi, byElement(0).thenComparing(byElement(1)));
String[][] multi = new String [][]{
    {"Josef", "cool"},
    {"Josef", "bat"},
    {"zeta", "doen"}
};
multi ----> [ ][ ][ ]
             |  |  |
             |  |  \->["zeta", "doen"]
             |  |
             |  \-> ["Josef"]["bat"]
             |
             \-> ["Josef"]["cool"]
first --> ["Josef"]["cool"]
second--> ["Josef"]["bat"]
Arrays.sort(multi, new Comparator<String[]>(){
    @Override
    public int compare(String[] first, String[] second){
        // compare the first element
        int comparedTo = first[0].compareTo(second[0]);
        // if the first element is same (result is 0), compare the second element
        if (comparedTo == 0) return first[1].compareTo(second[1]);
        else return comparedTo;
    }
});
   Arrays.sort(multi, new Comparator<String[]>(){
            @Override
            public int compare(String[] first, String[] second){
                final String time1 = first[0];
                final String time2 = second[0];
                int compare = time1.compareTo(time2);
                if(compare != 0){
                    return compare;
                }else{
                    return first[1].compareTo(second[1]);
                }
            }

        });
Arrays.sort(multi, (first, second) -> {
    final String time1 = first[0];
    final String time2 = second[0];
    int compare = time1.compareTo(time2);
    if(compare != 0){
        return compare;
    }else{
        return first[1].compareTo(second[1]);
    }
})
Arrays.sort(multi, (a,b) -> a[0].compareTo(b[0]));