我有一个数据块,我想根据年龄和工资对它们进行排序。
对象Employee
有:
我想排序,以便最大年龄在最高位置。但是如果年龄相同的是两个人,那么它将比较他们之间的薪水,然后对于年龄和薪水高的人,他将在ArrayList的顶部。
在顶部列表中相应:Bob,Tim,Tom。然后在列表中:Alex,Sam,Craig等。
List<Employee> listEmployees = new ArrayList<Employee>();
listEmployees.add(new Employee("Tom", "Developer", 45, 80000));
listEmployees.add(new Employee("Sam", "Designer", 30, 75000));
listEmployees.add(new Employee("Bob", "Designer", 45, 134000));
listEmployees.add(new Employee("Peter", "Programmer", 25, 60000));
listEmployees.add(new Employee("Tim", "Designer", 45, 130000));
listEmployees.add(new Employee("Craig", "Programmer", 30, 52000));
listEmployees.add(new Employee("Anne", "Programmer", 25, 51000));
listEmployees.add(new Employee("Alex", "Designer", 30, 120000));
我尝试过使用
Collections.sort(Employees , new Comparator<listEmployees >() {
@Override
public int compare(EmployeeModelCls lhs, EmployeeModelCls rhs) {
return (rhs.getAge() - lhs.getAge());
}
});
我也试过
Collections.sort(Employees , new Comparator<listEmployees >() {
@Override
public int compare(EmployeeModelCls lhs, EmployeeModelCls rhs) {
return ((rhs.getAge() - lhs.getAge()) - (rhs.getSalary() - lhs.getSalary()));
}
});
但无法获得正确的数据。有没有人有任何想法?
答案 0 :(得分:2)
让比较器尽可能自然,因为它可以让您清楚地了解员工的比较方式。例如,
Collections.sort(Employees , new Comparator<listEmployees >() {
public int compare(EmployeeModelCls lhs, EmployeeModelCls rhs) {
if (lhs.getAge() < rhs.getAge()) {
return 1;
} else if (lhs.getAge() > rhs.getAge()) {
return -1;
} else {
if (lhs.getSalary() < rhs.getSalary()) {
return 1;
} else if (lhs.getSalary() > rhs.getSalary()) {
return -1;
} else {
return 0;
}
}
}
});
执行此操作后,您可以优化比较器。例如,
Collections.sort(Employees , new Comparator<listEmployees >() {
public int compare(EmployeeModelCls lhs, EmployeeModelCls rhs) {
return (rhs.getAge() == lhs.getAge()) ? (rhs.getSalary() - lhs.getSalary()) : (rhs.getAge() - lhs.getAge());
}
});
如您所见,我们仅在年龄相同时才比较工资。在您的代码中,即使年龄不同,您也可以比较工资。这就是问题所在。
答案 1 :(得分:1)
答案 2 :(得分:0)
也许这样试试
Collections.sort(listEmployees , new Comparator<listEmployees >() {
@Override
public int compare(EmployeeModelCls lhs, EmployeeModelCls rhs) {
if (rhs.getAge() - lhs.getAge() == 0)
return rhs.getSalary() - lhs.getSalary();
return (rhs.getAge() - lhs.getAge());
}
});