class ComplexComparator implements Comparator {
private final Comparator p1;
private final Comparator p2;
public ComplexComparator(Comparator p1, Comparator p2) {
this.p1 = p1;
this.p2=p2;
}
@Override
public int compare(Staff o1, Staff o2) {
int res = firstComparator.compare(o1, o2);
if (res == 0) {
res= secondComparator.compare(o1, o2);
}
return res;
}
要使用lambda表达式简化这段代码,可以将其重写为一个lambda表达式作为Comparator接口的实例。可以使用Comparator的静态方法comparing和thenComparing来创建一个复合的比较器,它将首先使用firstComparator进行比较,如果结果为0,则使用secondComparator进行比较。
下面是使用lambda表达式简化后的代码:
Comparator<Staff> comparator = Comparator.comparing((Staff staff) -> firstComparator.compare(staff, staff2))
.thenComparing((Staff staff) -> secondComparator.compare(staff, staff2));
然后,您可以将这个comparator应用于您的比较操作中:
@Override
public int compare(Staff o1, Staff o2) {
return comparator.compare(o1, o2);
}