java - Lambda 表达式在一个接口(interface)上工作吗?

标签 java java-8

Java 7

List<Person> personList = Person.createShortList();

// Sort with Inner Class
Collections.sort(personList, new Comparator<Person>() {
    public int compare(Person p1, Person p2) {
        return p1.getSurName().compareTo(p2.getSurName());
    }
});

Java 8

Collections.sort(personList, (Person p1, Person p2) -> 
                 p1.getSurName().compareTo(p2.getSurName()));

for (Person p : personList) {
    p.printName();
}

如果接口(interface) Comparator 有 2 个方法而不是只有一个 compare 是否可以使用 Lambda?

例如

public interface Comparator<T> {
    int compare(T o1, T o2);
    int compareTest(T o1, T o2);
}

最佳答案

函数式接口(interface)只需要一个抽象方法,而您的接口(interface)则不需要。但是,您可以为其中一种方法提供默认实现。在那种情况下它会起作用:

@FunctionalInterface
public interface Comparator<T> {

    int compare(T o1, T o2);

    default int reverseCompare(T o1, T o2) {
        return compare(o2, o1);
    }
}

关于java - Lambda 表达式在一个接口(interface)上工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38325460/

相关文章:

java-8 - Vertx RxJava Webclient 客户端

java - 扩展类并使变量可变

java - Docx4J 命令行将 doc/docx 文件转换为 html

Java 8 : Supplier working with files throws "stream has already been operated upon or closed"

java - 如何从 map 中生成具有不同值的 map (并使用 BinaryOperator 使用正确的键)?

java - 查找流交集是否为非空

java - 我如何修改我的程序以要求我替换数组中输入的给定数字,因为它不在所需的范围内

java - 如何控制android平台上进程中运行的线程

java - 在 Spring EL 中引用当前 bean 的属性

java - 终端流操作,在Java 8中以map作为输入