是否可以先按employee对象的薪水排序,如果两个对象的薪水相等,然后使用可比较和比较器接口按名称进行比较?
例如,我有一个Employee类,如下所示
public class Employee{
private int salary;
private int name;
public Employee(salary,name){
this.salary = salary;
this.name = name;
}
//...........getter methods...........
}
现在假设我们有一个Employee对象列表,其中包含一些工资金额和姓名。我想使用比较器或可比较的接口,并以这样的方式排序列表,列表是基于工资排序的,如果工资相同,那么在这种情况下,这两个Employee对象必须按其名称排序。有没有人能告诉我这是否可能?如果能有一个代码片段,我们将非常感激。
发布于 2016-03-13 12:13:06
Java 8让这一切变得非常简单:
List<Employee> list = ...
list.sort(Comparator.comparing(Employee::getSalary).thenComparing(Employee::getName));
发布于 2016-03-13 12:21:53
是的,你可以在两个步骤中实现它;
对象实现了int interface
公有类Employee实现可比的{ String name;double sal;//其他实现public int compareTo(Object o1) { Employee e= (Employee)o1;int iSalComaprison = Integer.compare(this.sal,e.sal);if (iSalComaprison == 0)//工资相等,使用name作为比较条件{ //lhs name与rhs name return name.compareTo(e.name)比较{}//现在如果薪资不相等,则返回薪资比较返回iSalComaprison;} }
您可以看到,首先我们对薪水进行比较,如果发现它们相等,我们可以使用名称进行比较,并直接从if块返回字符串比较结果。如果工资不相等,那么我们可以简单地返回工资比较结果,
int iSalComaprison = Integer.compare(this.sal, e.sal);
希望这能帮助你解决使用比较器模式的问题。
https://stackoverflow.com/questions/35969967
复制相似问题