Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对Java中的员工列表进行排序,其中老板的名字应首先命名appeas,然后按字母顺序排列其他员工_Java_Sorting_Comparator_Comparable - Fatal编程技术网

对Java中的员工列表进行排序,其中老板的名字应首先命名appeas,然后按字母顺序排列其他员工

对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

我想用Java对一个员工列表进行排序,在这个列表中,老板的名字应该首先出现,然后是其他员工,按字母顺序排列

        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感谢你违反了合同。更新了我的答案——根据问题描述(据我所知),这应该不是问题,但容错代码是好代码(问题描述可能只是实际数据的一个子集)