[英]Sort block of Objects in Java ArrayList
我有一塊數據,我想根據年齡和工資對它們進行排序。
對象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()));
}
});
但無法獲得正確的數據。 有人有什么想法嗎?
使比較器盡可能自然,因為它可以讓您清楚地了解員工的比較方式。 例如,
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());
}
});
如您所見,我們僅在年齡相同時才比較工資。 在您的代碼中,即使年齡不同,您也可以比較工資。 這就是問題。
也許試試這種方式
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());
}
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.