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!