Dokładna definicja „funkcjonalnego interfejsu” w Javie 8

Niedawno zacząłem eksplorować Javę 8 i nie do końca rozumiem pojęcie „funkcjonalnego interfejsu”, który jest niezbędny do implementacji wyrażeń lambda w Javie. Tam jestdość obszerny przewodnik do funkcji lambda w Javie, ale utknąłemrozdział, który podaje definicję koncepcji interfejsów funkcjonalnych. Definicja brzmi:

Dokładniej, interfejs funkcjonalny jest zdefiniowany jako dowolny interfejs, który ma dokładnie jedną metodę abstrakcyjną.

Następnie przechodzi do przykładów, z których jeden jestComparator berło:

public interface Comparator<T> {
    int compare(T o1, T o2);
    boolean equals(Object obj);
} 

Udało mi się przetestować, czy mogę użyć funkcji lambda zamiast argumentu Komparator i działa (tj.Collections.sort(list, (a, b) -> a-b)).

Ale w interfejsie komparatora obacompare iequals metody są abstrakcyjne, co oznacza, że ​​madwie abstrakcyjne metody. Jak to działa, jeśli definicja wymaga interfejsudokładnie jedna abstrakcyjna metoda? Czego mi tu brakuje?

questionAnswers(6)

yourAnswerToTheQuestion