Java 给两个比较器排序数组?

Java 给两个比较器排序数组?,java,comparison,Java,Comparison,假设我有两个比较器,一个初级比较器和一个次级比较器。如何首先通过主比较器对数组进行排序,然后再通过次比较器对数组进行排序 假设每个对象都有一个名称和一个数字字段 像 不创建新比较器是否可行?首先比较第二个比较器,然后比较第一个比较器。我相信这应该能奏效。您可以创建一个类来执行此操作 class FullName { public String firstName; public String secondName; } 假设您创建了一个名为bobbins的新名称,分配值,然后先

假设我有两个比较器,一个初级比较器和一个次级比较器。如何首先通过主比较器对数组进行排序,然后再通过次比较器对数组进行排序

假设每个对象都有一个名称和一个数字字段


不创建新比较器是否可行?

首先比较第二个比较器,然后比较第一个比较器。我相信这应该能奏效。您可以创建一个类来执行此操作

class FullName {
    public String firstName;
    public String secondName;
}
假设您创建了一个名为
bobbins
的新名称,分配值,然后先比较第二个名称,然后比较第一个名称。您可以使用静态函数进行比较:

public static bool compareTo ( FullName name1, FullName name2 ) {
    // Algorithm here
}

如果使用静态比较器,则必须执行以下操作:
FullName.compareTo(bobbins,charlichthaplin)

假设您的类是

class X {
    String name;
    int num;
}
那就需要排序了

Arrays.sort(x, new Comparator<X>() {
        @Override
        public int compare(X o1, X o2) {
            if (o1.name.equals(o2.name)) {
                return Integer.compare(o1.num, o2.num);
            }
            return o1.name.compareTo(o2.name);
        }});
Arrays.sort(x,新的比较器(){
@凌驾
公共整数比较(xO1,xO2){
如果(o1.name.equals(o2.name)){
返回整数.compare(o1.num,o2.num);
}
返回o1.name.compareTo(o2.name);
}});

是的,您可以在不创建新比较器的情况下完成排序

按主要字段、次要字段、第三字段等排序有一个方法:首先按最不重要的字段(第三字段)排序,然后按下一个重要字段(第二字段)排序,最后按最重要字段(主要字段)排序。但是排序算法需要稳定才能工作

如果要对数组进行排序,请使用。如果要对
列表进行排序,请使用。这两种方法都保证是稳定的

假设主要比较器对象存储在变量
primaryComp
中,次要比较器对象存储在
secondaryComp
中。下面是一些代码,可以实现您想要的功能:

Arrays.sort(mylist, secondaryComp);  // This must come first!
Arrays.sort(mylist, primaryComp);
Arrays.sort(mylist, secondaryComp);  // This must come first!
Arrays.sort(mylist, primaryComp);