我想按字母顺序对ArrayList
进行排序。因此我写了一个sortEmployees
方法。 如果我的员工姓名相同,我会根据他们的工资对他们进行分类,这意味着应该先打印出薪水较高的员工。
好吧,我成功地按字母顺序排序,但是我不知道如何比较,如果员工姓名相同,如果是这样的话,应该打印薪水较高的员工。 谢谢。
ArrayList<Employee> employees = new ArrayList<Employee>();
public void sortEmployees(){
Collections.sort(employees, (p1, p2) -> p1.name.compareTo(p2.name));
for(Employee employee: employees){
System.out.println("ID: " + employee.ID + END_OF_LINE + "Name: "+employee.name + END_OF_LINE + "Salary: " + employee.grossSalary);
System.out.println(""); // just an empty line
}
}
答案 0 :(得分:2)
创建一个适当的Comparator,根据您所需的条件比较两个项目。然后在ArrayList
上使用Collections.sort()。
如果您以后想要按不同条件排序,请使用其他Collections.sort()
再次致电Comparator
。
参考:How to sort an ArrayList using multiple sorting criteria?
只是对未来问题的建议,请在google问题之前正确google或在stackoverflow上搜索您的问题。大多数时候,这些微不足道的问题已经被提出并得到了回答。
答案 1 :(得分:1)
我假设你有方法等于返回两个名字是否相等。您可以按如下方式定义比较器:
ArrayList<Employee> employees = new ArrayList<Employee>();
public void sortEmployees(){
Collections.sort(employees, new Comparator<Employee>() {
@Override
public int compare(Employee a, Employee b) {
if (a.name.equals(b.name)) {
return b.salary - a.salary;
} else {
return p1.name.compareTo(p2.name);
}
}
});
for(Employee employee: employees){
System.out.println("ID: " + employee.ID + END_OF_LINE + "Name: "+employee.name + END_OF_LINE + "Salary: " + employee.grossSalary);
System.out.println(""); // just an empty line
}
}