【发布时间】:2021-12-16 09:59:54
【问题描述】:
我有一个简单的对象类:
public class Employee {
String name;
String secondName;
// Conctructor, getters & setters
}
员工名单:
List<Employee> employees = new ArrayList<>(Arrays.asList(
new Employee("Jake", "Bbb"),
new Employee("Ann", "Aaa"),
new Employee("Ivy", "Bbb"),
new Employee("Ivy", "Aaa"),
new Employee("Jake", "Aaa"),
new Employee("Tom", "Iii"),
new Employee("Neil", "Xxx"),
new Employee("Keith", "Ooo"),
new Employee("Tom", "Rrr")
));
我想先按预定义的 secondNames 顺序对它们进行排序,而不是按名称的自然顺序:
List<String> definedOrder = Arrays.asList("Iii", "Bbb", "Aaa");
这样:
employees.sort(
Comparator.comparing((Employee e) -> definedOrder.indexOf(e.getSecondName()))
.thenComparing(Employee::getName));
for (Employee em : employees){
System.out.println(em.getSecondName() + " / " + em.getName());
}
我建议先接收列表中的预定义对象,然后是其余对象:
Iii / Tom
Bbb / Ivy
Bbb / Jake
Aaa / Ann
Aaa / Ivy
Aaa / Jake
Ooo / Keith
Xxx / Neil
Rrr / Tom
但我收到的对象首先按自然顺序按 names 排序(使用 thenComparing() 方法),然后按 secondNames 进行预定义比较:
Ooo / Keith
Xxx / Neil
Rrr / Tom
Iii / Tom
Bbb / Ivy
Bbb / Jake
Aaa / Ann
Aaa / Ivy
Aaa / Jake
【问题讨论】:
标签: java sorting comparator