对Java中的员工列表进行排序,其中老板的名字应首先命名appeas,然后按字母顺序排列其他员工
我想用Java对一个员工列表进行排序,在这个列表中,老板的名字应该首先出现,然后是其他员工,按字母顺序排列对Java中的员工列表进行排序,其中老板的名字应首先命名appeas,然后按字母顺序排列其他员工,java,sorting,comparator,comparable,Java,Sorting,Comparator,Comparable,我想用Java对一个员工列表进行排序,在这个列表中,老板的名字应该首先出现,然后是其他员工,按字母顺序排列 Employee employee1 = new Employee(); Employee employee2 = new Employee(); Employee employee3 = new Employee(); Employee employee4 = new Employee(); employee
Employee employee1 = new Employee();
Employee employee2 = new Employee();
Employee employee3 = new Employee();
Employee employee4 = new Employee();
employee2.setName("X1");
employee2.setSalary("1000");
employee1.setName("BOSS");
employee1.setSalary("1000");
employee3.setName("A2");
employee3.setSalary("1000");
employee4.setName("X3");
employee4.setSalary("1000");
List<Employee> lists = new ArrayList<Employee>();
lists.add(employee1);
lists.add(employee2);
lists.add(employee3);
lists.add(employee4);
After sorting the output should be
BOSS
A2
X1
X3
employee1=新员工();
employee2=新员工();
员工员工3=新员工();
雇员雇员4=新雇员();
雇员2.设定名称(“X1”);
雇员2.固定工资(“1000”);
雇员1.设置名称(“老板”);
雇员1.固定工资(“1000”);
雇员3.设定名称(“A2”);
雇员3.固定工资(“1000”);
雇员4.设置名称(“X3”);
雇员4.固定工资(“1000”);
List lists=新建ArrayList();
列表。添加(员工1);
列表。添加(员工2);
列表。添加(员工3);
列表。添加(员工4);
排序后,输出应为
老板
A2
X1
X3
尝试一些效果
lists.sort(new Comparator<Employee>() {
@Override
public int compare(Employee o1, Employee o2) {
if (o1.getName().equals("BOSS")) {
if (o2.getName().equals("BOSS")) { return 0; }
else { return -1; }
}
else if (o2.getName().equals("BOSS")) { return 1; }
else { return o1.getName().compareTo(o2.getName()); }
}
});
lists.sort(新的比较器(){
@凌驾
公共整数比较(员工o1、员工o2){
如果(o1.getName().equals(“BOSS”){
if(o2.getName().equals(“BOSS”){return 0;}
else{return-1;}
}
else如果(o2.getName().equals(“BOSS”){return 1;}
else{return o1.getName().compareTo(o2.getName());}
}
});
这里,我们对Employee使用一个匿名comparator类,首先检查被比较的员工是否是“老板”,如果是,则强制将“老板”放在第一位的值。否则,我们将对员工的姓名进行简单的比较。您已经尝试过什么?你怎么知道谁是老板?你有问题吗?@ryanyyu你怎么知道谁是老板?它是组织结构图底部的人。我想。。。这不是一个好问题,因为compare(BOSS,BOSS)必须返回0,而不是-1。但是如果有两个BOSS呢?在这种情况下,您需要修正
比较以返回0,或者我们需要让他们进行决斗,直到有一个人站着为止。但是我认为,compare(a,b)
和compare(b,a)
都返回-1(或都返回1)的情况违反了比较器的约定,可能导致排序
抛出异常。实际上,只有一个BOSS
可能会有问题,如果排序调用了,则使用与两个参数相同的对象比较。不过,我不知道它是否真的这样做了。@ajb感谢你违反了合同。更新了我的答案——根据问题描述(据我所知),这应该不是问题,但容错代码是好代码(问题描述可能只是实际数据的一个子集)