Vergleichen von Objekten anhand mehrerer Felder
Bei der objektorientierten Programmierung ist es oft wünschenswert, Objekte anhand ihrer verschiedenen Felder zu vergleichen. Die Comparable-Schnittstelle ermöglicht jedoch nur Vergleiche anhand eines einzelnen Felds.
Das Problem
Betrachten Sie die Person-Klasse mit den Feldern Vorname, Nachname und Alter. Wir brauchen eine Möglichkeit, diese Objekte anhand mehrerer Felder zu vergleichen, ohne übermäßige Methoden oder Overhead hinzuzufügen.
Java 8-Lösung
Java 8 führte Lambda-Ausdrücke und Methodenreferenzen ein, die Folgendes ermöglichen Es ist einfach, benutzerdefinierte Komparatoren zu erstellen:
Comparator<Person> comparator = Comparator.comparing((Person p) -> p.firstName) .thenComparing(p -> p.lastName) .thenComparingInt(p -> p.age);
Dieser Komparator vergleicht zuerst Vorname, dann Nachname und schließlich Alter.
Alternative Syntax
Wenn die Person-Klasse Zugriffsmethoden für ihre Felder hat, können wir Methodenreferenzen verwenden, um den Komparator zu vereinfachen:
Comparator<Person> comparator = Comparator.comparing(Person::getFirstName) .thenComparing(Person::getLastName) .thenComparingInt(Person::getAge);
Verwendung des Komparators
Sobald der Komparator erstellt ist, können wir ihn verwenden wie folgt:
So sortieren Sie eine Sammlung von Personenobjekten:
List<Person> persons = ...; Collections.sort(persons, comparator);
So vergleichen Sie zwei Personenobjekte:
Person p1 = ...; Person p2 = ...; int result = comparator.compare(p1, p2);
Umsetzung Comparable
Wenn eine Klasse direkt vergleichbar sein muss (z. B. zur Verwendung in sortierten Datenstrukturen), kann sie die Comparable-Schnittstelle mit der folgenden Methode implementieren:
@Override public int compareTo(Person o) { int result = Comparator.comparing(Person::getFirstName) .thenComparing(Person::getLastName) .thenComparingInt(Person::getAge) .compare(this, o); return result; }
This Der Ansatz vereinfacht Objektvergleiche und reduziert die Notwendigkeit mehrerer dedizierter Vergleichsmethoden.
Das obige ist der detaillierte Inhalt vonWie kann ich Java-Objekte basierend auf mehreren Feldern vergleichen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!