Heim >Java >javaLernprogramm >Wie kann ich eine Liste benutzerdefinierter Objekte in Java mithilfe von Komparatoren richtig sortieren?

Wie kann ich eine Liste benutzerdefinierter Objekte in Java mithilfe von Komparatoren richtig sortieren?

DDD
DDDOriginal
2024-12-25 06:16:09546Durchsuche

How Can I Correctly Sort a List of Custom Objects in Java Using Comparators?

Verwenden von Komparatoren zum Sortieren von Objekten in Java

Komparatoren verstehen

In Java sind Komparatoren Schnittstellen, die definieren, wie Objekte sollen zu Sortierzwecken verglichen werden. Durch die Implementierung eines Komparators können Sie ein benutzerdefiniertes Sortierverhalten definieren, das von der natürlichen Reihenfolge der Comparable-Schnittstelle abweicht.

Fehleranalyse

Ihr Code stößt auf eine Ausnahme, weil Sie Ich versuche, eine ArrayList mit People-Objekten zu sortieren, ohne die Comparable- oder Comparator-Schnittstelle zu implementieren. Die Vergleichsmethode in der People-Klasse ist falsch, da sie Instanzen der People-Klasse und nicht die Integer-Wrapper-Objekte vergleichen sollte.

Lösung

Um das Problem zu beheben, müssen Sie kann wie folgt einen Komparator implementieren, der Personenobjekte anhand ihrer IDs vergleicht:

import java.util.Comparator;

public class PeopleComparator implements Comparator<People> {

    @Override
    public int compare(People p1, People p2) {
        return p1.getId() - p2.getId();
    }
}

Verwenden Sie in Ihrer TestPeople-Klasse den PeopleComparator So sortieren Sie die Peps-Liste:

import java.util.ArrayList;
import java.util.Collections;

public class TestPeople {

    public static void main(String[] args) {
        ArrayList<People> peps = new ArrayList<>();

        peps.add(new People(123, "M", 14.25));
        // ...

        Collections.sort(peps, new PeopleComparator());

        for (People person : peps) {
            System.out.println(person);
        }
    }
}

Alternative Ansätze

Java bietet eine alternative Möglichkeit, eine benutzerdefinierte Sortierung mithilfe der Comparator-Klasse zu implementieren, die direkt dem zugewiesen werden kann sort-Methode, ohne dass eine separate Klasse erforderlich ist. Zum Beispiel:

Collections.sort(peps, new Comparator<People>() {

    @Override
    public int compare(People p1, People p2) {
        return p1.getId() - p2.getId();
    }
});

Zusätzlich können Sie die neue Lambda-Ausdruckssyntax (Java 8) verwenden, um die Komparatorimplementierung zu vereinfachen:

Collections.sort(peps, (p1, p2) -> p1.getId() - p2.getId());

Das obige ist der detaillierte Inhalt vonWie kann ich eine Liste benutzerdefinierter Objekte in Java mithilfe von Komparatoren richtig sortieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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