Comprendre les comparateurs
En Java, les comparateurs sont des interfaces qui définissent la façon dont les objets doivent être comparés à des fins de tri. L'implémentation d'un comparateur vous permet de définir un comportement de tri personnalisé qui s'écarte de l'ordre naturel fourni par l'interface Comparable.
Analyse des erreurs
Votre code rencontre une exception car vous' J'essaie de trier une ArrayList contenant des objets People sans implémenter l'interface Comparable ou Comparator. La méthode de comparaison dans la classe People est incorrecte car elle doit comparer les instances de la classe People, et non les objets wrapper Integer.
Solution
Pour résoudre le problème, vous peut implémenter un Comparator qui compare les objets People en fonction de leurs identifiants, comme suit :
import java.util.Comparator; public class PeopleComparator implements Comparator<People> { @Override public int compare(People p1, People p2) { return p1.getId() - p2.getId(); } }
Dans votre classe TestPeople, utilisez PeopleComparator pour trier la liste des peps :
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); } } }
Approches alternatives
Java fournit une autre façon d'implémenter un tri personnalisé à l'aide de la classe Comparator, qui peut être affectée directement au méthode de tri sans avoir besoin d’une classe distincte. Par exemple :
Collections.sort(peps, new Comparator<People>() { @Override public int compare(People p1, People p2) { return p1.getId() - p2.getId(); } });
De plus, vous pouvez utiliser la nouvelle syntaxe d'expression lambda (Java 8 ) pour simplifier l'implémentation du comparateur :
Collections.sort(peps, (p1, p2) -> p1.getId() - p2.getId());
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!