Java 8 比较器keyExtractor
Java 8 Comparator keyExtractor
在Java8 Comparator中,我们可以创建一个比较器如下。
Comparator.comparing(keyExtractor);
目前我有一个class如下
class Employee {
String name;
Department dept;
}
class Department {
String departmentName;
}
现在,如果我想为 Employee class 创建一个根据部门名称对记录进行排序的比较器,我该如何编写我的密钥提取器?
尝试了以下代码,但没有用。
Comparator.comparing(Employee::getDept::getDepartmentName);
您可以使用function that extracts a sort key
即
Comparator.comparing(Employee::getDept,Comparator.comparing(Department::departmentName));
这里的技巧是方法引用不是对象并且没有成员可以访问。所以你不能这样做:
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);
在Java8 Comparator中,我们可以创建一个比较器如下。
Comparator.comparing(keyExtractor);
目前我有一个class如下
class Employee {
String name;
Department dept;
}
class Department {
String departmentName;
}
现在,如果我想为 Employee class 创建一个根据部门名称对记录进行排序的比较器,我该如何编写我的密钥提取器?
尝试了以下代码,但没有用。
Comparator.comparing(Employee::getDept::getDepartmentName);
您可以使用function that extracts a sort key
即
Comparator.comparing(Employee::getDept,Comparator.comparing(Department::departmentName));
这里的技巧是方法引用不是对象并且没有成员可以访问。所以你不能这样做:
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);