a.compareTo(b): Vergleichbare Schnittstelle: Vergleicht Werte und gibt ein int zurück, das angibt, ob die Werte kleiner, gleich oder größer als sind.
Wenn Ihre Klassenobjekte eine natürliche Reihenfolge haben , implementieren Sie die Comparable<T>Schnittstelle und definieren Sie diese Methode. Alle Java-Klassen mit einem natürlichen Ordnungsimplement Comparable<T>- Beispiel : String, Wrapper-Klassen ,BigInteger
compare(a, b): Komparatorschnittstelle : Vergleicht Werte von zwei Objekten. Dies wird als Teil der Comparator<T>Schnittstelle implementiert, und die typische Verwendung besteht darin, eine oder mehrere kleine Dienstprogrammklassen zu definieren, die dies implementieren, um sie an Methoden wie sort()oder zur Verwendung durch Sortieren von Datenstrukturen wie TreeMapund zu übergebenTreeSet . Möglicherweise möchten Sie ein Comparator-Objekt für Folgendes erstellen:
Mehrere Vergleiche . Verschiedene Möglichkeiten zum Sortieren von Objekten. Beispielsweise möchten Sie möglicherweise eine Personenklasse nach Name, ID, Alter, Größe usw. sortieren. Sie definieren einen Komparator für jede dieser Klassen, die an die sort()Methode übergeben werden sollen.
Systemklasse Zum Bereitstellen von Vergleichsmethoden für Klassen, über die Sie keine Kontrolle haben. Sie können beispielsweise einen Komparator für Zeichenfolgen definieren, der sie nach Länge vergleicht.
Strategiemuster Zum Implementieren eines Strategiemusters. In dieser Situation möchten Sie einen Algorithmus als Objekt darstellen, das Sie als Parameter übergeben, in einer Datenstruktur speichern usw. können.
Wenn Ihre Klassenobjekte eine natürliche Sortierreihenfolge haben, benötigen Sie möglicherweise nicht compare ().
Vergleichbar
Ein vergleichbares Objekt kann sich mit einem anderen Objekt vergleichen.
Komparator
Ein Komparatorobjekt kann zwei verschiedene Objekte vergleichen. Die Klasse vergleicht nicht ihre Instanzen, sondern die Instanzen einiger anderer Klassen.
Anwendungsfallkontexte:
Vergleichbare Schnittstelle
Die Methode equals und ==und !=Operatoren testen auf Gleichheit / Ungleichheit, bieten jedoch keine Möglichkeit zum Testen auf relative Werte .
Einige Klassen (z. B. String und andere Klassen mit einer natürlichen Reihenfolge) implementieren die Comparable<T>Schnittstelle, die eine compareTo()Methode definiert .
Sie möchten Comparable<T>in Ihrer Klasse implementieren, wenn Sie es mit Collections.sort()oder verwenden möchtenArrays.sort() Methoden verwenden .
Komparatorobjekt definieren
Sie können Komparatoren erstellen, um eine beliebige Art und Weise für jede Klasse zu sortieren .
Beispielsweise Stringdefiniert die Klasse den CASE_INSENSITIVE_ORDERKomparator .
Der Unterschied zwischen den beiden Ansätzen kann mit dem Begriff verknüpft werden: Bestellte Sammlung :
Wenn eine Sammlung bestellt wird, bedeutet dies, dass Sie in der Sammlung in einer bestimmten (nicht zufälligen) Reihenfolge iterieren können (a Hashtable ist nicht bestellt).
Comparable befindet sich in der Implementierung und ist von der Benutzeroberfläche aus nicht sichtbar. Wenn Sie also sortieren, wissen Sie nicht wirklich, was passieren wird.
Comparator gibt Ihnen die Gewissheit, dass die Bestellung genau definiert ist.
Da diese Antwort vollständig ist, ärgert mich Folgendes über Comparable, das Sie vielleicht hinzufügen möchten: Sie befindet sich in der Implementierung und ist über die Benutzeroberfläche nicht sichtbar. Wenn Sie also sortieren, wissen Sie nicht wirklich, was passieren wird. Die Verwendung eines Komparators gibt Ihnen die Gewissheit, dass die Reihenfolge genau definiert ist
HaveAGuess
@HaveAGuess guter Punkt. Ich habe Ihren Kommentar zur besseren Sichtbarkeit in die Antwort aufgenommen.
VonC
Objekte haben eine natürliche Ordnung, was bedeutet natürliche Ordnung hier? Hat ein String-Datenelement für zB Name in Mitarbeiterklasse eine natürliche Reihenfolge?
Narendra Jaggi
@NarendraJaggi Siehe en.wikipedia.org/wiki/Enumeration . Eine Reihenfolge, die die Aufzählung erleichtert. "Natürlich" in dem Sinne, dass eine gegebene Ordnung im Indexsatz eine einzigartige Möglichkeit bietet, das nächste Element bei einer
Teilaufzählung aufzulisten
2
@VedantKekan Danke. Ich habe 2 Links in dieser Antwort wiederhergestellt.
Beide Methoden machen dasselbe, aber jede Schnittstelle wird in einem etwas anderen Kontext verwendet.
Die vergleichbare Schnittstelle wird verwendet, um den Objekten der implementierenden Klasse eine natürliche Reihenfolge aufzuerlegen. Die compareTo()Methode wird als natürliche Vergleichsmethode bezeichnet. Die Comparator- Schnittstelle wird verwendet, um den Objekten der implementierenden Klasse eine Gesamtreihenfolge aufzuerlegen. Weitere Informationen finden Sie unter den Links, um genau zu erfahren, wann die einzelnen Schnittstellen verwendet werden sollen.
Können Sie einige Beispiele nennen? Beide Methoden geben die gleichen Antworten?
Ich weiß nicht, warum 'Vergleichbar' für natürliche Ordnung ist? Wir können es anpassen, nicht wahr?
c-an
14
Ähnlichkeiten:
Beide sind benutzerdefinierte Methoden zum Vergleichen von zwei Objekten.
Beide geben eine intBeschreibung der Beziehung zwischen zwei Objekten zurück.
Unterschiede:
Die Methode compare()ist eine Methode, zu deren Implementierung Sie verpflichtet sind, wenn Sie die ComparatorSchnittstelle implementieren . Sie können zwei Objekte an die Methode übergeben und eine intBeschreibung ihrer Beziehung zurückgeben.
Comparator comp =newMyComparator();int result = comp.compare(object1, object2);
Die Methode compareTo()ist eine Methode, zu deren Implementierung Sie verpflichtet sind, wenn Sie die ComparableSchnittstelle implementieren . Damit kann ein Objekt mit Objekten ähnlichen Typs verglichen werden.
String s ="hi";int result = s.compareTo("bye");
Zusammenfassung:
Grundsätzlich gibt es zwei verschiedene Möglichkeiten, Dinge zu vergleichen.
Die Methoden müssen nicht die gleichen Antworten geben. Das hängt davon ab, welche Objekte / Klassen Sie sie nennen.
Wenn Sie Ihre eigenen Klassen implementieren, von denen Sie wissen, dass Sie sie irgendwann vergleichen möchten, können Sie sie die Comparable-Schnittstelle implementieren lassen und die compareTo () -Methode entsprechend implementieren.
Wenn Sie einige Klassen aus einer API verwenden, die die Schnittstelle Comparable nicht implementieren, diese aber dennoch vergleichen möchten. Dh zum Sortieren. Sie können eine eigene Klasse erstellen, die die Comparator-Schnittstelle implementiert, und in ihrer compare () -Methode die Logik implementieren.
Die vergleichbare Schnittstelle enthält eine aufgerufene Methode, compareTo(obj)die nur ein Argument akzeptiert und sich mit einer anderen Instanz oder Objekten derselben Klasse vergleicht.
Die Komparatorschnittstelle enthält eine aufgerufene Methode, compare(obj1,obj2)die zwei Argumente akzeptiert und den Wert von zwei Objekten aus derselben oder verschiedenen Klassen vergleicht.
stammt von der Schnittstelle java.lang.Comparable, die implementiert wurde, um dieses Objekt mit einem anderen zu vergleichen und einen negativen int-Wert für dieses Objekt zu erhalten, der kleiner als, 0 für gleich oder ein positiver Wert für größer als das andere ist. Dies ist die bequemere Vergleichsmethode, muss jedoch in jeder Klasse implementiert werden, die Sie vergleichen möchten.
compare(T obj1, T obj2)
stammt von der Schnittstelle java.util.Comparator, die in einer separaten Klasse implementiert ist, die die Objekte einer anderen Klasse vergleicht, um einen negativen int-Wert für das erste Objekt zu erhalten, der kleiner als, 0 für gleich oder ein positiver Wert für größer als das zweite Objekt ist. Es wird benötigt, wenn eine Klasse compareTo () nicht implementieren kann, da es nicht geändert werden kann. Es wird auch verwendet, wenn Sie verschiedene Methoden zum Vergleichen von Objekten wünschen, nicht nur eines (z. B. nach Name oder Alter).
Mit Comparator können wir n Vergleichslogiken für eine Klasse schreiben lassen .
Z.B
Für eine Autoklasse
Wir können eine Vergleichsklasse haben, die basierend auf der Fahrzeugmodellnummer verglichen werden kann. Wir können auch eine Vergleichsklasse haben, die basierend auf dem Modelljahr des Autos verglichen werden kann.
Die Beziehung zwischen dem Objekt mit dieser Methode und seinen Mitarbeitern ist unterschiedlich.
compareTo()ist eine Methode der Schnittstelle Comparable , daher wird sie verwendet, um DIESE Instanz mit einer anderen zu vergleichen.
compare()ist eine Methode der Schnittstelle Vergleicher wird es verwendet , so miteinander zwei unterschiedliche Instanzen einer anderen Klasse zu vergleichen.
Wenn Sie so wollen, Comparablebedeutet die Implementierung , dass Instanzen der Klasse leicht verglichen werden können.
Implementieren Comparatorbedeutet, dass Instanzen geeignet sind, verschiedene Objekte (anderer Klassen) zu vergleichen.
Der Hauptunterschied besteht in der Verwendung der Schnittstellen:
Comparable (mit compareTo ()) erfordert, dass die Objekte verglichen werden (um eine TreeMap zu verwenden oder eine Liste zu sortieren), um diese Schnittstelle zu implementieren. Aber was ist, wenn die Klasse Comparable nicht implementiert und Sie es nicht ändern können, weil es Teil einer Bibliothek eines Drittanbieters ist? Dann müssen Sie einen Komparator implementieren, der etwas weniger bequem zu bedienen ist.
compareTo()wird für ein Objekt aufgerufen, um es mit einem anderen Objekt zu vergleichen.
compare()wird für ein Objekt aufgerufen, um zwei andere Objekte zu vergleichen.
Der Unterschied besteht darin, wo die Logik definiert ist, die den tatsächlichen Vergleich durchführt.
Nicht das, was ich eine fantastische Antwort nennen würde, aber ich denke nicht, dass es eine Ablehnung verdient.
Paul Tomblin
Einverstanden, persönlich behalte ich mir Abstimmungen für falsche oder irreführende Antworten vor. Dieser ist definitiv richtig.
Joachim Sauer
Also, wo sind diese "freundlichen" Leute, die mich herabgestimmt haben? Dies ist meine zweite richtige Antwort, die abgelehnt wurde, weil jemand den Punkt verfehlt hat. Entweder der Punkt der Ablehnung oder der Punkt meiner Antwort. Das Leben ist so grausam .. ;-)
Abgan
0
Wenn Sie eine Liste sortieren möchten, die das Objekt Foo enthält, muss die Foo-Klasse die Schnittstelle Comparable implementieren, da die Sortiermethode der Liste diese Methode verwendet.
Wenn Sie eine Util-Klasse schreiben möchten, die zwei andere Klassen vergleicht, können Sie die Comparator-Klasse implementieren.
Name der Mitarbeitertabelle , DoB, Gehalt
Tomas, 2/10/1982, 300
Daniel, 3/11/1990, 400
Kwame, 10.02.1998, 520
Über die Schnittstelle Vergleichbar können Sie eine Liste von Objekten sortieren, z. B. Mitarbeiter mit Bezug auf ein primäres Feld. Beispielsweise können Sie mit der CompareTo () -Methode nach Namen oder Gehalt sortieren
emp1.getName().compareTo(emp2.getName())
Eine flexiblere Schnittstelle für solche Anforderungen bietet die Comparator- Schnittstelle, deren einzige Methode compare () ist.
compareTo()ist von der ComparableSchnittstelle und compare()ist von der ComparatorSchnittstelle.
Comparablewird verwendet, um eine Standardreihenfolge für Objekte innerhalb einer Klasse Comparatorzu definieren, während eine benutzerdefinierte Reihenfolge definiert wird, die an eine Methode übergeben werden soll.
Es gibt einen technischen Aspekt, der ebenfalls hervorgehoben werden sollte. Sagen Sie bitte Vergleichsverhalten Parametrisierung von einer Client - Klasse benötigen, und Sie fragen sich, ob zu verwenden Comparableoder , Comparatorwie dies für ein Verfahren:
classPokemon{int healthPoints;int attackDamage;publicvoid battle (Comparable<Pokemon> comparable,Pokemon opponent){if(comparable.compareTo(opponent)>0){//comparable needs to, but cannot, access this.healthPoints for exampleSystem.out.println("battle won");}else{System.out.println("battle lost");}}}
comparablewäre ein Lambda oder ein Objekt, und es gibt keine Möglichkeit comparable, auf die Felder von thisPokemon zuzugreifen . ( thisBezieht sich in einem Lambda auf die Instanz der äußeren Klasse im Bereich des Lambda, wie im Programmtext definiert.) Das fliegt also nicht , und wir müssen a Comparatormit zwei Argumenten verwenden.
Verwenden Sie die vergleichbare Schnittstelle zum Sortieren nach mehr als einem Wert wie Alter, Name, Dept_name ... Verwenden Sie für einen Wert die Vergleichsschnittstelle
Antworten:
Aus JavaNotes :
a.compareTo(b)
:Vergleichbare Schnittstelle: Vergleicht Werte und gibt ein int zurück, das angibt, ob die Werte kleiner, gleich oder größer als sind.
Wenn Ihre Klassenobjekte eine natürliche Reihenfolge haben , implementieren Sie die
Comparable<T>
Schnittstelle und definieren Sie diese Methode. Alle Java-Klassen mit einem natürlichen OrdnungsimplementComparable<T>
- Beispiel :String
, Wrapper-Klassen ,BigInteger
compare(a, b)
:Komparatorschnittstelle : Vergleicht Werte von zwei Objekten. Dies wird als Teil der
Comparator<T>
Schnittstelle implementiert, und die typische Verwendung besteht darin, eine oder mehrere kleine Dienstprogrammklassen zu definieren, die dies implementieren, um sie an Methoden wiesort()
oder zur Verwendung durch Sortieren von Datenstrukturen wieTreeMap
und zu übergebenTreeSet
. Möglicherweise möchten Sie ein Comparator-Objekt für Folgendes erstellen:sort()
Methode übergeben werden sollen.Wenn Ihre Klassenobjekte eine natürliche Sortierreihenfolge haben, benötigen Sie möglicherweise nicht compare ().
Zusammenfassung von http://www.digizol.com/2008/07/java-sorting-comparator-vs-comparable.html
Vergleichbar
Ein vergleichbares Objekt kann sich mit einem anderen Objekt vergleichen.
Komparator
Ein Komparatorobjekt kann zwei verschiedene Objekte vergleichen. Die Klasse vergleicht nicht ihre Instanzen, sondern die Instanzen einiger anderer Klassen.
Anwendungsfallkontexte:
Vergleichbare Schnittstelle
Die Methode equals und
==
und!=
Operatoren testen auf Gleichheit / Ungleichheit, bieten jedoch keine Möglichkeit zum Testen auf relative Werte .Einige Klassen (z. B. String und andere Klassen mit einer natürlichen Reihenfolge) implementieren die
Comparable<T>
Schnittstelle, die einecompareTo()
Methode definiert .Sie möchten
Comparable<T>
in Ihrer Klasse implementieren, wenn Sie es mitCollections.sort()
oder verwenden möchtenArrays.sort()
Methoden verwenden .Komparatorobjekt definieren
Sie können Komparatoren erstellen, um eine beliebige Art und Weise für jede Klasse zu sortieren .
Beispielsweise
String
definiert die Klasse denCASE_INSENSITIVE_ORDER
Komparator .Der Unterschied zwischen den beiden Ansätzen kann mit dem Begriff verknüpft werden:
Bestellte Sammlung :
Wenn eine Sammlung bestellt wird, bedeutet dies, dass Sie in der Sammlung in einer bestimmten (nicht zufälligen) Reihenfolge iterieren können (a
Hashtable
ist nicht bestellt).Eine Sammlung mit einer natürlichen Reihenfolge wird nicht nur bestellt, sondern sortiert . Eine natürliche Ordnung zu definieren kann schwierig sein! (wie in natürlicher Stringreihenfolge ).
Ein weiterer Unterschied, auf den HaveAGuess in den Kommentaren hingewiesen hat :
Comparable
befindet sich in der Implementierung und ist von der Benutzeroberfläche aus nicht sichtbar. Wenn Sie also sortieren, wissen Sie nicht wirklich, was passieren wird.Comparator
gibt Ihnen die Gewissheit, dass die Bestellung genau definiert ist.quelle
compareTo()
ist von derComparable
Schnittstelle.compare()
ist von derComparator
Schnittstelle.Beide Methoden machen dasselbe, aber jede Schnittstelle wird in einem etwas anderen Kontext verwendet.
Die vergleichbare Schnittstelle wird verwendet, um den Objekten der implementierenden Klasse eine natürliche Reihenfolge aufzuerlegen. Die
compareTo()
Methode wird als natürliche Vergleichsmethode bezeichnet. Die Comparator- Schnittstelle wird verwendet, um den Objekten der implementierenden Klasse eine Gesamtreihenfolge aufzuerlegen. Weitere Informationen finden Sie unter den Links, um genau zu erfahren, wann die einzelnen Schnittstellen verwendet werden sollen.quelle
Ähnlichkeiten:
Beide sind benutzerdefinierte Methoden zum Vergleichen von zwei Objekten.
Beide geben eine
int
Beschreibung der Beziehung zwischen zwei Objekten zurück.Unterschiede: Die Methode
compare()
ist eine Methode, zu deren Implementierung Sie verpflichtet sind, wenn Sie dieComparator
Schnittstelle implementieren . Sie können zwei Objekte an die Methode übergeben und eineint
Beschreibung ihrer Beziehung zurückgeben.Die Methode
compareTo()
ist eine Methode, zu deren Implementierung Sie verpflichtet sind, wenn Sie dieComparable
Schnittstelle implementieren . Damit kann ein Objekt mit Objekten ähnlichen Typs verglichen werden.Zusammenfassung:
Grundsätzlich gibt es zwei verschiedene Möglichkeiten, Dinge zu vergleichen.
quelle
Die Methoden müssen nicht die gleichen Antworten geben. Das hängt davon ab, welche Objekte / Klassen Sie sie nennen.
Wenn Sie Ihre eigenen Klassen implementieren, von denen Sie wissen, dass Sie sie irgendwann vergleichen möchten, können Sie sie die Comparable-Schnittstelle implementieren lassen und die compareTo () -Methode entsprechend implementieren.
Wenn Sie einige Klassen aus einer API verwenden, die die Schnittstelle Comparable nicht implementieren, diese aber dennoch vergleichen möchten. Dh zum Sortieren. Sie können eine eigene Klasse erstellen, die die Comparator-Schnittstelle implementiert, und in ihrer compare () -Methode die Logik implementieren.
quelle
Die vergleichbare Schnittstelle enthält eine aufgerufene Methode,
compareTo(obj)
die nur ein Argument akzeptiert und sich mit einer anderen Instanz oder Objekten derselben Klasse vergleicht.Die Komparatorschnittstelle enthält eine aufgerufene Methode,
compare(obj1,obj2)
die zwei Argumente akzeptiert und den Wert von zwei Objekten aus derselben oder verschiedenen Klassen vergleicht.quelle
stammt von der Schnittstelle java.lang.Comparable, die implementiert wurde, um dieses Objekt mit einem anderen zu vergleichen und einen negativen int-Wert für dieses Objekt zu erhalten, der kleiner als, 0 für gleich oder ein positiver Wert für größer als das andere ist. Dies ist die bequemere Vergleichsmethode, muss jedoch in jeder Klasse implementiert werden, die Sie vergleichen möchten.
stammt von der Schnittstelle java.util.Comparator, die in einer separaten Klasse implementiert ist, die die Objekte einer anderen Klasse vergleicht, um einen negativen int-Wert für das erste Objekt zu erhalten, der kleiner als, 0 für gleich oder ein positiver Wert für größer als das zweite Objekt ist. Es wird benötigt, wenn eine Klasse compareTo () nicht implementieren kann, da es nicht geändert werden kann. Es wird auch verwendet, wenn Sie verschiedene Methoden zum Vergleichen von Objekten wünschen, nicht nur eines (z. B. nach Name oder Alter).
quelle
Mit Comparator können wir n Vergleichslogiken für eine Klasse schreiben lassen .
Z.B
Für eine Autoklasse
Wir können eine Vergleichsklasse haben, die basierend auf der Fahrzeugmodellnummer verglichen werden kann. Wir können auch eine Vergleichsklasse haben, die basierend auf dem Modelljahr des Autos verglichen werden kann.
Autoklasse
Komparator Nr. 1 basierend auf Modell Nr
Komparator Nr. 2 basierend auf dem Modelljahr
Dies ist jedoch bei der vergleichbaren Schnittstelle nicht möglich .
Im Fall einer vergleichbaren Schnittstelle kann die Methode compareTo () nur eine Logik enthalten .
quelle
Die Beziehung zwischen dem Objekt mit dieser Methode und seinen Mitarbeitern ist unterschiedlich.
compareTo()
ist eine Methode der Schnittstelle Comparable , daher wird sie verwendet, um DIESE Instanz mit einer anderen zu vergleichen.compare()
ist eine Methode der Schnittstelle Vergleicher wird es verwendet , so miteinander zwei unterschiedliche Instanzen einer anderen Klasse zu vergleichen.Wenn Sie so wollen,
Comparable
bedeutet die Implementierung , dass Instanzen der Klasse leicht verglichen werden können.Implementieren
Comparator
bedeutet, dass Instanzen geeignet sind, verschiedene Objekte (anderer Klassen) zu vergleichen.quelle
Der Hauptunterschied besteht in der Verwendung der Schnittstellen:
Comparable (mit compareTo ()) erfordert, dass die Objekte verglichen werden (um eine TreeMap zu verwenden oder eine Liste zu sortieren), um diese Schnittstelle zu implementieren. Aber was ist, wenn die Klasse Comparable nicht implementiert und Sie es nicht ändern können, weil es Teil einer Bibliothek eines Drittanbieters ist? Dann müssen Sie einen Komparator implementieren, der etwas weniger bequem zu bedienen ist.
quelle
compareTo()
wird für ein Objekt aufgerufen, um es mit einem anderen Objekt zu vergleichen.compare()
wird für ein Objekt aufgerufen, um zwei andere Objekte zu vergleichen.Der Unterschied besteht darin, wo die Logik definiert ist, die den tatsächlichen Vergleich durchführt.
quelle
Wenn Sie eine Liste sortieren möchten, die das Objekt Foo enthält, muss die Foo-Klasse die Schnittstelle Comparable implementieren, da die Sortiermethode der Liste diese Methode verwendet.
Wenn Sie eine Util-Klasse schreiben möchten, die zwei andere Klassen vergleicht, können Sie die Comparator-Klasse implementieren.
quelle
Name der Mitarbeitertabelle , DoB, Gehalt
Tomas, 2/10/1982, 300
Daniel, 3/11/1990, 400
Kwame, 10.02.1998, 520
Über die Schnittstelle Vergleichbar können Sie eine Liste von Objekten sortieren, z. B. Mitarbeiter mit Bezug auf ein primäres Feld. Beispielsweise können Sie mit der CompareTo () -Methode nach Namen oder Gehalt sortieren
Eine flexiblere Schnittstelle für solche Anforderungen bietet die Comparator- Schnittstelle, deren einzige Methode compare () ist.
Beispielcode
}}
quelle
Noch ein Punkt:
compareTo()
ist von derComparable
Schnittstelle undcompare()
ist von derComparator
Schnittstelle.Comparable
wird verwendet, um eine Standardreihenfolge für Objekte innerhalb einer KlasseComparator
zu definieren, während eine benutzerdefinierte Reihenfolge definiert wird, die an eine Methode übergeben werden soll.quelle
Es gibt einen technischen Aspekt, der ebenfalls hervorgehoben werden sollte. Sagen Sie bitte Vergleichsverhalten Parametrisierung von einer Client - Klasse benötigen, und Sie fragen sich, ob zu verwenden
Comparable
oder ,Comparator
wie dies für ein Verfahren:comparable
wäre ein Lambda oder ein Objekt, und es gibt keine Möglichkeitcomparable
, auf die Felder vonthis
Pokemon zuzugreifen . (this
Bezieht sich in einem Lambda auf die Instanz der äußeren Klasse im Bereich des Lambda, wie im Programmtext definiert.) Das fliegt also nicht , und wir müssen aComparator
mit zwei Argumenten verwenden.quelle
Verwenden Sie die vergleichbare Schnittstelle zum Sortieren nach mehr als einem Wert wie Alter, Name, Dept_name ... Verwenden Sie für einen Wert die Vergleichsschnittstelle
quelle
Hier in
return obj1.compareTo(obj1)
oderreturn obj1.compareTo(obj)
Anweisung nur Objekt nehmen; primitiv ist nicht erlaubt. BeispielsweiseAber
Name ist String Object, also hat es funktioniert. Wenn Sie die Rollennummer des Schülers sortieren möchten, verwenden Sie den folgenden Code.
oder
quelle