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

Java:使用条件对ArrayList中的对象进行排序,java,arraylist,Java,Arraylist,我想按字母顺序对我的ArrayList进行排序。因此,我编写了一个对员工进行分类的方法如果我的员工姓名相同,我会根据他们的工资对他们进行排序,这意味着工资较高的员工应该先打印出来。 嗯,我成功地按字母顺序对它们进行了排序,但我不知道如何进行比较,如果员工姓名相同,如果是这样,则应打印工资较高的员工。谢谢 ArrayList<Employee> employees = new ArrayList<Employee>(); public void sortEmployees

我想按字母顺序对我的
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
    }
}
ArrayList employees=new ArrayList();
公共部门雇员(){
Collections.sort(employees,(p1,p2)->p1.name.compareTo(p2.name));
用于(员工:员工){
System.out.println(“ID:+employee.ID+行尾+”名称:“+employee.Name+行尾+”工资:+employee.grossalary”);
System.out.println(“”;//只是一个空行
}
}
创建一个合适的项目,根据您想要的标准比较两个项目。然后在
ArrayList
上使用

如果以后要按不同的标准排序,请使用不同的
比较器再次调用
Collections.sort()

参考:

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

创建一个合适的方案,根据您想要的标准比较两个项目。然后在
ArrayList
上使用

如果以后要按不同的标准排序,请使用不同的
比较器再次调用
Collections.sort()

参考:


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

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

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
  }
}
ArrayList employees=new ArrayList();
公共部门雇员(){
Collections.sort(雇员,新的比较器(){
@凌驾
公共整数比较(员工a、员工b){
如果(a.名称等于(b.名称)){
返回b.薪资-a.薪资;
}否则{
返回p1.name.compareTo(p2.name);
}
}
});
用于(员工:员工){
System.out.println(“ID:+employee.ID+行尾+”名称:“+employee.Name+行尾+”工资:+employee.grossalary”);
System.out.println(“”;//只是一个空行
}
}

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

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
  }
}
ArrayList employees=new ArrayList();
公共部门雇员(){
Collections.sort(雇员,新的比较器(){
@凌驾
公共整数比较(员工a、员工b){
如果(a.名称等于(b.名称)){
返回b.薪资-a.薪资;
}否则{
返回p1.name.compareTo(p2.name);
}
}
});
用于(员工:员工){
System.out.println(“ID:+employee.ID+行尾+”名称:“+employee.Name+行尾+”工资:+employee.grossalary”);
System.out.println(“”;//只是一个空行
}
}

你就快到了。修改比较器,如果
compareTo()
为非零,请使用此值,否则请比较薪资并使用该值。很抱歉,我没有完全理解它。你介意在代码中给我看一下吗?
Comparator.comparating(e->e.name)。然后comparingit(e->e.grossalary)
你就快到了。修改比较器,如果
compareTo()
为非零,请使用此值,否则请比较薪资并使用该值。很抱歉,我没有完全理解它。你介意在代码中给我看一下吗?
Comparator.comparating(e->e.name)。然后comparingit(e->e.grossalary)
虽然这看起来是正确的,但我认为最好使用lambda,而不是创建
Comparator
。它的代码更少,并且适合OP当前的实现。虽然这看起来是正确的,但我认为最好使用lambda,而不是创建一个
比较器。它的代码更少,并且适合OP当前的实现。@JavaTeachMe2018您找到了还是要我编辑我的答案?@JavaTeachMe2018您找到了还是要我编辑我的答案?