Lambda Ausdruck: Welche Methode ist die Richtige?

GetIT

Mitglied
Hallo,

ich habe eine Frage zu Lambda-Ausdrücken. Im Buch "Java ist auch eine Insel" steht:
Java:
public static void main(String[] args) {
	String[] words = { "M", "\nSkyfall", "Q", "\t\tAdele\t" };
        /* FETT */
	Arrays.sort(words, (String s1, String s2) -> {
		return s1.trim().compareTo(s2.trim());
	});
        /* ende FETT */
	System.out.println(Arrays.toString(words));
}
"Der in fett gesetzte Ausdruck nennt sich Lambda Ausdruck. Er ist eine kompakte Art und Weise, Schnittstellen mit genau einer Methode zu implementieren; die Schnittstelle Comparator hat genau eine Operation compare(...)."

Das stimmt doch nicht. java.util.Comparator hat zwei abstrakte Methoden
- compare(...)
- equals(...)

Woher weiss ich jetzt - ohne das Probieren zu müssen - , dass ich die Methode compare(...) als Lamda-Ausdruck benutzen kann die Methode equals(...) aber nicht?

Java:
public static void main(String[] args) {
	boolean gleich = false;
	String s1 = "Test";
	String s2 = "Test";
	gleich = (String s1, String s2) -> {
		s1.equals(s2);
        }
}
Error: The target type of this expression must be a functional interface
 
Zuletzt bearbeitet:
Die equals-Methode wird in diesem Fall nicht als bereitgestellte Methode des Interface angesehen, sondern dann als spezielle Ableitung der equals-Methode der Mutterklasse Object.

Das heißt, die compare-Methode, ist die einzige, die in diesem Interface definiert worden ist.

PS: Der Lambda-Ausdruck ist nur:
Java:
(s1, s2) -> s1.trim().compareTo(s2.trim())
 

Zurück
Oben