Comparator.comparing 有两个 lambda 参数

Comparator.comparing with two arguments to the lambda

我用非 java 8 方式编写了我的自定义比较器,如下所示,但即使阅读了一些博客也不清楚如何使用 Comparator.comparinglambda 样式语法.

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));
};