Heim >Java >javaLernprogramm >Wie kann ich eine Liste benutzerdefinierter Objekte in Java mithilfe von Komparatoren richtig sortieren?
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!