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());