Nauka języka Java 8 Lambdas i po prostu zastanawiasz się, w jaki sposób kompilator wie, której metody w Komparatorze użyć do wyrażenia lambda? Wygląda na to, że nie jest to interfejs SAM? Ma 2 abstrakcyjne metody:FunctionalInterface Comparator ma 2 metody abstrakcyjne.
@FunctionalInterface
public interface Comparator<T> {
int compare(T o1, T o2);
boolean equals(Object obj);
}