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

问题描述:

我想按字母顺序排序我的ArrayList。所以我写了一个的方法。 如果我的员工有相同的姓名,我想根据他们的薪水对他们进行分类,这意味着应该先打印出薪水较高的员工。Java:使用条件对ArrayList中的对象进行排序

那么,我成功地设法按字母顺序排序,但我不知道如何比较,如果员工有相同的名称,如果是这样的话,应该打印薪水较高的员工。谢谢。

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

你快到了。修改你的比较器,如果'compareTo()'不为零,则使用此值,否则比较薪水并使用该值。 – dave

+0

对不起,我没有完全明白。你介意在代码中显示我吗? – JavaTeachMe2018

+0

'Comparator.comparing(e - > e.name).thenComparingInt(e - > suchrossSalary)' – shmosel

创建一个适当的Comparator将根据您的所需条件比较两个项目。然后在您的ArrayList上使用Collections.sort()

如果稍后您想按不同标准排序,请使用不同的Comparator再次拨打Collections.sort()

参考:How to sort an ArrayList using multiple sorting criteria?

只是一个为未来的问题咨询,请妥善Google或提出新的问题之前,计算器您的问题进行搜索。大多数时候,这些微不足道的问题已经被提出并得到解答。

+0

谢谢你的回复。我查看了另一篇文章的答案,但我仍然不确定比较器应该是什么样子,因为这是我第一次与他们合作。你介意提高你的答案并展示代码的外观? – JavaTeachMe2018

+0

@ JavaTeachMe2018你弄明白了吗?还是你想让我编辑我的答案? – unrealsoul007

+0

我还没有弄清楚,谢谢你的考虑:=) – JavaTeachMe2018

我假设你有方法等于返回两个名字是否相等。您可以按如下方式定义您的比较器:

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 
    } 
} 
+0

虽然这看起来正确,但我认为使用_lambda_会更好,而不是创建一个“比较器”。它的代码更少,符合OP当前的实现。 – dave