Heim >Java >javaLernprogramm >Warum schlägt „Comparator.reversed()' mit Lambda-Ausdrücken in der Java-Sortierung fehl?

Warum schlägt „Comparator.reversed()' mit Lambda-Ausdrücken in der Java-Sortierung fehl?

Barbara Streisand
Barbara StreisandOriginal
2024-12-03 21:38:12493Durchsuche

Why Does `Comparator.reversed()` Fail with Lambda Expressions in Java Sorting?

Warum Comparator.reversed() mit Lambdas fehlschlägt

Beim Sortieren einer Liste von Benutzerobjekten mithilfe von Comparator.comparing mit einem Lambda-Ausdruck, an Es kann ein Fehler auftreten:

userList.sort(Comparator.comparing(u -> u.getName()).reversed()); // Compiler error

Dies ist auf eine Einschränkung im Typinferenzmechanismus des Compilers zurückzuführen. Der Compiler hat Schwierigkeiten, den Typ des Lambda-Arguments „u“ zu bestimmen.

Im folgenden Beispiel ermöglicht die Verwendung einer Methodenreferenz dem Compiler, den Zieltyp abzuleiten und den Fehler zu vermeiden:

userList.sort(Comparator.comparing(User::getName).reversed()); // works

Die Methodenreferenz stellt zusätzliche Typinformationen bereit, die der Compiler verwendet, um auf den Typ von „u“ als Benutzer zu schließen.

Um den Fehler bei der Verwendung eines Lambda zu vermeiden, können Sie Folgendes tun Geben Sie explizit den Typ des Lambda-Arguments an:

userList.sort(Comparator.comparing((User u) -> u.getName()).reversed());

In zukünftigen Compiler-Versionen wird dieses Problem möglicherweise behoben und der Fehler tritt möglicherweise nicht mehr auf.

Das obige ist der detaillierte Inhalt vonWarum schlägt „Comparator.reversed()' mit Lambda-Ausdrücken in der Java-Sortierung fehl?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn