Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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.util.ArrayList进行排序<;父类型>;基于儿童类型? 公共界面人机界面{} 公共阶级男子实行人权{ 公众人物(姓名){ this.firstName=firstName; } ..... } 公共阶级妇女实施人权{ 公共女性(字符串名){ this.firstName=firstName; } ..... } 公共类测试{ 公共静态void main(字符串[]args){ 列表工程师=新的ArrayList(); 工程师。增加(新增人员(“A”); 增加(新女性(A); 工程师。增加(新人员(“C”); 工程师。增加(新人员(“E”); 增加(新增人员(“Z”); 增加(新女性); 增加(新女性); 工程师。增加(新人员(“X”); 工程师。增加(新人员(“O”); 增加(新女性(“G”); 收集、分类(工程师); System.out.println(…打印工程师数组…) }_Java_Sorting_Collections_Enums_Type Erasure - Fatal编程技术网

如何对java.util.ArrayList进行排序<;父类型>;基于儿童类型? 公共界面人机界面{} 公共阶级男子实行人权{ 公众人物(姓名){ this.firstName=firstName; } ..... } 公共阶级妇女实施人权{ 公共女性(字符串名){ this.firstName=firstName; } ..... } 公共类测试{ 公共静态void main(字符串[]args){ 列表工程师=新的ArrayList(); 工程师。增加(新增人员(“A”); 增加(新女性(A); 工程师。增加(新人员(“C”); 工程师。增加(新人员(“E”); 增加(新增人员(“Z”); 增加(新女性); 增加(新女性); 工程师。增加(新人员(“X”); 工程师。增加(新人员(“O”); 增加(新女性(“G”); 收集、分类(工程师); System.out.println(…打印工程师数组…) }

如何对java.util.ArrayList进行排序<;父类型>;基于儿童类型? 公共界面人机界面{} 公共阶级男子实行人权{ 公众人物(姓名){ this.firstName=firstName; } ..... } 公共阶级妇女实施人权{ 公共女性(字符串名){ this.firstName=firstName; } ..... } 公共类测试{ 公共静态void main(字符串[]args){ 列表工程师=新的ArrayList(); 工程师。增加(新增人员(“A”); 增加(新女性(A); 工程师。增加(新人员(“C”); 工程师。增加(新人员(“E”); 增加(新增人员(“Z”); 增加(新女性); 增加(新女性); 工程师。增加(新人员(“X”); 工程师。增加(新人员(“O”); 增加(新女性(“G”); 收集、分类(工程师); System.out.println(…打印工程师数组…) },java,sorting,collections,enums,type-erasure,Java,Sorting,Collections,Enums,Type Erasure,输出 男性(A);男性(C);男性(E);男性(O);男性(X);男性(Z)女性(A);女性(B); 妇女(G);妇女(AJ) 我的排序arraylist应该按照类型(男性或女性)进行初始排序,而第二个排序基于firstname。我如何才能最好地实现这一点 我尝试了集合。排序(…) 不能得到想要的结果 提前感谢您需要使用a和集合。排序(列表l,比较器c) 静态最终比较器= 新比较器() { 公共整数比较(人e1、人e2) { //您的自定义比较代码位于此处 } }; 集合。排序(工程师、MyCo

输出

男性(A);男性(C);男性(E);男性(O);男性(X);男性(Z)女性(A);女性(B); 妇女(G);妇女(AJ)

我的排序arraylist应该按照类型(男性或女性)进行
初始排序,而第二个排序基于firstname
。我如何才能最好地实现这一点

我尝试了
集合。排序(…)

不能得到想要的结果

提前感谢

您需要使用a和
集合。排序(列表l,比较器c)

静态最终比较器=
新比较器()
{
公共整数比较(人e1、人e2)
{
//您的自定义比较代码位于此处
}
};
集合。排序(工程师、MyComparator);
其他信息可通过有关对象排序的教程找到: 你可能是说

public interface Human extends Comparable<Human> {}
公共界面人机界面{}
也就是说:人与其他人具有可比性。在这种情况下,如果您希望根据类型和名称来比较人,那么您的界面人需要表示这两个属性:

public interface Human extends Comparable<Human> {
    enum Type { MAN, WOMAN }
    Type getType();
    String getName();
}
公共界面人机界面{
枚举类型{男,女}
类型getType();
字符串getName();
}
然后编写一个适当的
compareTo()
实现,同时考虑类型和名称,并使用
Collections.sort()
进行排序。

我建议使用“Comparator”接口。
编写实现此接口的其他类。

然后在compare方法中编写相应的代码,检查实例,然后检查实例的成员。

你们推荐这样做吗

public class HumanComparator implements java.util.Comparator<HumanBeings> {

    @Override
    public int compare(HumanBeings o1, HumanBeings o2) {
        if(o1 instanceof Men && o2 instanceof Men)
            return 0;
        else if(o1 instanceof Men && o2 instanceof Women)
            return -1;
        else if (o1 instanceof Women && o2 instanceof Men)
            return 1;

        return 0;

    }
}
公共类HumanComparator实现java.util.Comparator{
@凌驾
公共整数比较(人形o1,人形o2){
if(o1男性实例和o2男性实例)
返回0;
其他if(男性和女性o2实例o1实例)
返回-1;
else if(女性o1实例和男性o2实例)
返回1;
返回0;
}
}
..并添加更多代码以按名字进一步排序


基于Ryan Stewart的解决方案的比较器实现
。效果非常好

Collections.sort(engineers, new Comparator<Human>() {
    @Override
    public int compare(Human o1, Human o2) {
        if(o1.getType().equals(o2.getType())) {
            return o1.getFirstName().compareTo(o2.getFirstName());
        } else {
            return o1.getType().compareTo(o2.getType());
        }
    }
});
Collections.sort(工程师,新比较器(){
@凌驾
公共整数比较(人o1,人o2){
如果(o1.getType().equals(o2.getType())){
返回o1.getFirstName().compareTo(o2.getFirstName());
}否则{
返回o1.getType().compareTo(o2.getType());
}
}
});

或多或少,除非在这种情况下您不应该使用instanceof。您的
Human
应该表示其“类型”,如中所述。
Collections.sort(engineers, new Comparator<Human>() {
    @Override
    public int compare(Human o1, Human o2) {
        if(o1.getType().equals(o2.getType())) {
            return o1.getFirstName().compareTo(o2.getFirstName());
        } else {
            return o1.getType().compareTo(o2.getType());
        }
    }
});
class HumanComparator implements Comparator<Human>{

@Override
public int compare(Human humanObj1, Human humanObj2) {
    int index;
    if(humanObj1 instanceof Men && humanObj2 instanceof Men){
        String firstName1 = humanObj1.getFirstName();
        String firstName2 = humanObj2.getFirstName();
        index = firstName1.compareTo(firstName2);
    }else if(humanObj1 instanceof Women && humanObj2 instanceof Women){
        String firstName1 = humanObj1.getFirstName();
        String firstName2 = humanObj2.getFirstName();
        index = firstName1.compareTo(firstName2);
    }else if(humanObj1 instanceof Men && humanObj2 instanceof Women){
        index =-1;
    }else if(humanObj1 instanceof Women && humanObj2 instanceof Men){
        index =+1;
    }else{
        index =0;
    }
    return index;
}
  Collections.sort(engineers ,new HumanComparator());