2 回答

TA贡献1796条经验 获得超7个赞
解释
Comparator
是一个功能接口(只需要一种方法)。因此,您可以使用 lambda 表达式创建它的实例。
它的行为与创建实例的其他方法非常相似,例如扩展的常规类或匿名类。
lambda 指的是功能接口所需的一种方法。因为只有一种方法,所以没有歧义。lambda命名输入参数,然后给出该方法的实现(它提供了一个body)。
概述
您有以下选项来创建接口或抽象类的实例:
创建一个扩展并使用 new 的类
使用匿名类
假设我们有一个只提供一种方法的接口(当时称为功能接口),我们另外还有以下两个选项来创建它的实例:
使用 lambda 表达式
使用方法参考
例如,我们要创建一个乘法实例,使用以下接口:
@FunctionalInterface
public interface Operation {
int op(int a, int b);
}
创建一个扩展并使用 new 的类:
public class Multiplicator implements Operation {
@Override
public int op(int a, int b) {
return a * b;
}
}
// Usage
Operation operation = new Multiplicator();
System.out.println(operation.op(5, 2)); // 10
使用匿名类:
Operation operation = new Operation() {
@Override
public int op(int a, int b) {
return a * b;
}
};
// Usage
System.out.println(operation.op(5, 2)); // 10
使用 lambda 表达式:
Operation operation = (a, b) -> a * b;
System.out.println(operation.op(5, 2)); // 10
使用方法参考:
// Somewhere else in our project, in the `MathUtil` class
public static int multiply(int a, int b) {
return a * b;
}
// Usage
Operation operation = MathUtil::multiply;
System.out.println(operation.op(5, 2)); // 10

TA贡献1906条经验 获得超3个赞
从技术上讲,java.util.Comparator
它是一个函数式接口,不仅因为它被注释为一个,还因为它只有一个(抽象)方法,compare(T, T)
.
所有其他方法都有默认实现,因此考虑到 lambda 表达式,它们会被忽略。
添加回答
举报