Java 8 Comparator keyExtractor

这个问题已经在这里有了答案:            >            Comparator.comparing(…) of a nested field                                    3个
在Java 8 Comparator中,我们可以如下创建一个比较器.

Comparator.comparing(keyExtractor);

目前,我的课程如下

class Employee {
    String name;
    Department dept;
}

class Department {
    String departmentName;
}

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

尝试了下面的代码,但是没有用.

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

解决方法:

这里的窍门是方法引用不是对象,并且没有成员可以访问.所以你不能这样做:

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);
上一篇:c-如何使用其他类型的键搜索std :: map


下一篇:java-自定义比较器