【问题标题】:Java: Sorting objects in an ArrayList with conditionsJava:使用条件对 ArrayList 中的对象进行排序
【发布时间】:2018-03-22 12:05:46
【问题描述】:

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

【问题讨论】:

  • 你快到了。修改比较器,如果 compareTo() 不为零,则使用此值,否则比较薪水并使用该值。
  • 对不起,我不太明白。你介意用代码告诉我吗?
  • Comparator.comparing(e -&gt; e.name).thenComparingInt(e -&gt; e.grossSalary)

标签: java arraylist


【解决方案1】:

创建一个合适的Comparator,它将根据您所需的标准比较两个项目。然后在您的ArrayList 上使用Collections.sort()

如果以后您想按不同的标准进行排序,请使用不同的Comparator 再次调用Collections.sort()

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

只是对未来问题的建议,请在提出新问题之前正确地谷歌或在 stackoverflow 上搜索您的问题。大多数时候,这些琐碎的问题已经被提出并得到了回答。

【讨论】:

  • @JavaTeachMe2018 你弄明白了还是想让我编辑我的答案?
【解决方案2】:

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

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,而不是创建 Comparator。它的代码更少,适合 OP 当前的实现。
猜你喜欢
  • 2014-11-09
  • 2017-12-12
  • 2012-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 2015-12-17
相关资源
最近更新 更多