我用非java 8方式编写了我的自定义比较器,如下所示,但即使在阅读了一些博客后也不清楚,如何使用Comparator.comparing
样式语法使用lambda
。
class MyCustomComparator implements Comparator<Integer> {
@Override
public int compare(Integer n1, Integer n2) {
String ns1 = Integer.toString(n1) + Integer.toString(n2);
String ns2 = Integer.toString(n2) + Integer.toString(n1);
if (Integer.parseInt(ns1) > Integer.parseInt(ns2)) {
return 1;
} else if (Integer.parseInt(ns1) < Integer.parseInt(ns2))
return -1;
return 0;
}
}
通常Comparator.comparing
取lambda,其中大多数例子我说lamda没有参数。
答案 0 :(得分:3)
Comparator.comparing
允许您在比较之前指定要单独应用于每个对象的转换。由于您的Comparator需要两个参数才能应用其逻辑,因此您无法将其写为Comparator.comparing
表达式。
答案 1 :(得分:3)
Comparator.comparing…
工厂方法适用于创建比较转换值或要比较的元素属性的比较器,但不是必须组合两个值时。
但是你仍然可以使用没有工厂方法的lambda表达式实现比较器
Comparator<Integer> myCustomComparator = (n1, n2) -> {
String ns1 = "" + n1 + n2, ns2 = "" + n2 + n1;
return Integer.compare(Integer.parseInt(ns1), Integer.parseInt(ns2));
};