Java 使用比较器自定义排序
sort()
方法中的第二个参数采用
Comparator
的一个实例。
我们可以在比较器的帮助下实现任何类型的比较逻辑,然后我们可以使用
sort()
方法根据给定的自定义逻辑对列表进行排序。
Collections.sort(List, Comparator);
我们可以为每种排序需求创建一个单独的
Comparator
实例,然后我们可以组合这些实例来创建分组排序效果。
例如,如果我们想根据三个字段 id、name 和 age 对 Employee 列表进行排序。
在这种情况下,我们需要创建 3 个
Comparator
实例。
Java创建自定义的排序比较器
这是在 Java 中创建 Comparator 的通用语法。
在这种情况下,我们将创建一个
Comparator
,它将按
id
字段对 Employee 列表进行排序。
Comparator<Employee> compareById = new Comparator<Employee>() {
@Override
public int compare(Employee o1, Employee o2) {
return o1.getId().compareTo(o2.getId());
Comparator<Employee> compareByName = new Comparator<Employee>() {
@Override
public int compare(Employee o1, Employee o2) {
return o1.getName().compareTo(o2.getName());
我们还可以使用 lambda 表达式来进一步缩短语法。
//Id Comparator
Comparator<Employee> compareById = (Employee o1, Employee o2) ->
o1.getId().compareTo( o2.getId() );
//Name Comparator
Comparator<Employee> compareByName = (Employee o1, Employee o2) ->
o1.getName().compareTo( o2.getName() );
使用刚创建的比较器进行排序
ArrayList<Employee> employees = getUnsortedEmployeeList();
Comparator<Employee> compareById =
(Employee o1, Employee o2) -> o1.getId().compareTo( o2.getId() );
Collections.sort(employees, compareById);
Collections.sort(employees, compareById.reversed());