Comparator.comparing 有两个 lambda 参数
Comparator.comparing with two arguments to the lambda
我用非 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,lambda 不接受参数。
Comparator.comparing
允许您在比较每个对象之前指定要单独应用于每个对象的转换。由于您的 Comparator 需要两个参数才能应用其逻辑,因此您不能将其写为 Comparator.comparing
表达式。
Comparator.comparing…
工厂方法适用于创建比较器来比较转换后的值或要比较的元素的属性,但不适用于必须组合这两个值的情况。
但是您仍然可以在不使用工厂方法的情况下使用 lambda 表达式实现比较器
Comparator<Integer> myCustomComparator = (n1, n2) -> {
String ns1 = "" + n1 + n2, ns2 = "" + n2 + n1;
return Integer.compare(Integer.parseInt(ns1), Integer.parseInt(ns2));
};
我用非 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,lambda 不接受参数。
Comparator.comparing
允许您在比较每个对象之前指定要单独应用于每个对象的转换。由于您的 Comparator 需要两个参数才能应用其逻辑,因此您不能将其写为 Comparator.comparing
表达式。
Comparator.comparing…
工厂方法适用于创建比较器来比较转换后的值或要比较的元素的属性,但不适用于必须组合这两个值的情况。
但是您仍然可以在不使用工厂方法的情况下使用 lambda 表达式实现比较器
Comparator<Integer> myCustomComparator = (n1, n2) -> {
String ns1 = "" + n1 + n2, ns2 = "" + n2 + n1;
return Integer.compare(Integer.parseInt(ns1), Integer.parseInt(ns2));
};