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您找到了还是要我编辑我的答案?