Java:使用条件对ArrayList中的对象进行排序

时间:2017-10-10 23:49:06

标签: java arraylist

我想按字母顺序对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
    }
}

2 个答案:

答案 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
  }
}