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
Freigeben: 2024-12-03 21:38:12
Original
567 Leute haben es durchsucht

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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());
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage