-1

可能重复:
使用多个键对 Java 对象进行排序

我有一个员工班。根据我要排序的员工姓名。如果两个对象(即两个员工)的员工姓名相同,那么我想根据员工年龄对其进行排序。

为了对员工姓名进行排序,我实现了 COMparable 接口并使用了以下代码:

@Override
public int compareTo(Employee o) {
    return name.compareTo(o.getName());
}

这段代码对我来说很好用。但是当两名员工的姓名相同时,我无法理解如何根据年龄进行排序?

我需要为此使用比较器吗?我不确定如何实现这一目标。

请帮忙

4

3 回答 3

1

如果名称相同(即结果为 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;
}
于 2012-12-08T14:16:02.440 回答
0

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

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

现在您可以使用 Collections.sort 如下:

Collections.sort(employeeList, new CustomComparator());
于 2012-12-08T14:29:57.257 回答
-1

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

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)
}
于 2012-12-08T14:22:03.217 回答