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
}
}
创建一个适当的Comparator将根据您的所需条件比较两个项目。然后在您的ArrayList
上使用Collections.sort()。
如果稍后您想按不同标准排序,请使用不同的Comparator
再次拨打Collections.sort()
。
参考:How to sort an ArrayList using multiple sorting criteria?
只是一个为未来的问题咨询,请妥善Google或提出新的问题之前,计算器您的问题进行搜索。大多数时候,这些微不足道的问题已经被提出并得到解答。
谢谢你的回复。我查看了另一篇文章的答案,但我仍然不确定比较器应该是什么样子,因为这是我第一次与他们合作。你介意提高你的答案并展示代码的外观? – JavaTeachMe2018
@ JavaTeachMe2018你弄明白了吗?还是你想让我编辑我的答案? – unrealsoul007
我还没有弄清楚,谢谢你的考虑:=) – 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
}
}
虽然这看起来正确,但我认为使用_lambda_会更好,而不是创建一个“比较器”。它的代码更少,符合OP当前的实现。 – dave
你快到了。修改你的比较器,如果'compareTo()'不为零,则使用此值,否则比较薪水并使用该值。 – dave
对不起,我没有完全明白。你介意在代码中显示我吗? – JavaTeachMe2018
'Comparator.comparing(e - > e.name).thenComparingInt(e - > suchrossSalary)' – shmosel