Java 排序对象

Java 排序对象,java,jakarta-ee,Java,Jakarta Ee,可能重复: 我有一个雇员班。基于我要排序的员工姓名。如果两个对象(即两名员工)的员工姓名相同,则我希望根据员工年龄对其进行排序 为了对员工姓名进行w.r.t排序,我实现了可比较的界面并使用了以下代码: @Override public int compareTo(Employee o) { return name.compareTo(o.getName()); } 这段代码对我来说很好。但我不明白,当两名员工的姓名相同时,如何合并基于年龄的排序 我需要用比较器来做这个吗?我不知道如何

可能重复:

我有一个雇员班。基于我要排序的员工姓名。如果两个对象(即两名员工)的员工姓名相同,则我希望根据员工年龄对其进行排序

为了对员工姓名进行w.r.t排序,我实现了可比较的界面并使用了以下代码:

@Override
public int compareTo(Employee o) {
    return name.compareTo(o.getName());
}
这段代码对我来说很好。但我不明白,当两名员工的姓名相同时,如何合并基于年龄的排序

我需要用比较器来做这个吗?我不知道如何做到这一点

请帮助

如果名称相同(即结果为0),则可以按年龄排序。如果名称返回一个非零结果,那么只需返回该结果即可

比如说

@Override
public int compareTo(Employee o) {
    int i = name.compareTo(o.getName());
    if (i == 0) { //ie the names are the same
        return age.compareTo(o.getAge();
    }
    return i;
}

描述中的逻辑应直接转换为代码:

public int compareTo(Employee o)
{
    firstfield = name.compareTo(o.name())
    if( firstfield == 0 )
    {
        return age.compareTo(o.age())
    }
    else
    {
        return firstfield
    }
}
您还可以通过构造新字符串来进行比较:

public int compareTo(Employee o)
{
    me = sprintf( "%s:%d", name, age)
    them = sprintf( "%s:%d", o.name, o.age )
    return me.compareTo(them)
}

您可以将员工存储到ArrayList中,然后使用Collections.sort对其进行排序

public class CustomComparator implements Comparator<Employee> {
    @Override
    public int compare(Employee o1, Employee o2) {
        return o1.getAge().compareTo(o2.getAge());
    }
}

第二种方法很糟糕,不起作用。RNJ已经给出了第一种方法作为答案,除了他的答案很好,而你的答案不是。-1这不考虑员工的姓名?问题是,如果名字相同,就只能按年龄排序
Collections.sort(employeeList, new CustomComparator());