Lambda表达式在一个接口上工作吗?

use*_*697 1 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());
    }
});
Run Code Online (Sandbox Code Playgroud)

Java 8

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

for (Person p : personList) {
    p.printName();
}
Run Code Online (Sandbox Code Playgroud)

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

例如

public interface Comparator<T> {
    int compare(T o1, T o2);
    int compareTest(T o1, T o2);
}
Run Code Online (Sandbox Code Playgroud)

fab*_*ian 5

功能接口只需要一个抽象方法,而不是您的接口.但是,您可以为其中一个方法提供默认实现.在这种情况下它会工作:

@FunctionalInterface
public interface Comparator<T> {

    int compare(T o1, T o2);

    default int reverseCompare(T o1, T o2) {
        return compare(o2, o1);
    }
}
Run Code Online (Sandbox Code Playgroud)