Java 8 Comparator keyExtractor

时间:2018-04-04 17:44:07

标签: java java-8 comparator

在Java 8 Comparator中,我们可以按如下方式创建比较器。

Comparator.comparing(keyExtractor);

目前我有一个课程如下

class Employee {
    String name;
    Department dept;
}

class Department {
    String departmentName;
}

现在,如果我想为Employee类创建一个比较器,根据部门名称对记录进行排序,我该如何编写我的密钥提取器?

尝试了以下代码,但没有奏效。

Comparator.comparing(Employee::getDept::getDepartmentName);

2 个答案:

答案 0 :(得分:2)

这里的技巧是方法引用不是对象,也没有成员可以访问。所以你不能这样做:

Employee::getDept.getDepartmentName

此外,方法引用不是类,因此您无法从它们获取另一个方法引用。所以这也失败了。

Employee::getDept::getDepartmentName

最后,我们留下的唯一选择就是这个。

e -> e.getDept().getDepartmentName()

试试这个,

Employee empOne = new Employee("Mark", new Department("Accounts"));
Employee empTwo = new Employee("Melissa", new Department("Sales"));
List<Employee> employees = Arrays.asList(empOne, empTwo);
employees.sort(Comparator.comparing(e -> e.getDept().getDepartmentName()));
employees.forEach(System.out::println);

答案 1 :(得分:1)

您可以使用function that extracts a sort key

即。

Comparator.comparing(Employee::getDept,Comparator.comparing(Department::departmentName));