Heim > Java > javaLernprogramm > Wie kann ich Java-Objekte basierend auf mehreren Feldern vergleichen?

Wie kann ich Java-Objekte basierend auf mehreren Feldern vergleichen?

Linda Hamilton
Freigeben: 2024-12-21 03:26:10
Original
472 Leute haben es durchsucht

How Can I Compare Java Objects Based on Multiple Fields?

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

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

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);
    Nach dem Login kopieren
  • So vergleichen Sie zwei Personenobjekte:

    Person p1 = ...;
    Person p2 = ...;
    int result = comparator.compare(p1, p2);
    Nach dem Login kopieren

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

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!

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