Tri personnalisé pour ArrayList of Objects
Lors de la gestion des données dans les applications modernes, il est souvent nécessaire de trier les objets selon des critères spécifiques. Le tri améliore la lisibilité des données, facilite la récupération des données et rationalise les opérations. Un scénario courant consiste à trier une ArrayList d'objets à l'aide d'un ordre de tri personnalisé.
Supposons que vous disposiez d'une application de carnet d'adresses qui stocke les contacts dans une ArrayList. Chaque contact contient des champs pour le nom, les numéros de domicile et de portable et une adresse. Pour trier les contacts par nom, vous devez définir une fonction de tri personnalisée.
Définir un ordre naturel
Si le tri par un champ spécifique est une exigence naturelle pour le Classe Contact, vous pouvez implémenter l’interface Comparable au sein de la classe. Voici un exemple :
public class Contact implements Comparable<Contact> { private String name; // getters, setters, and other boilerplate @Override public int compareTo(Contact other) { return name.compareTo(other.name); } }
En implémentant Comparable, vous établissez un ordre naturel pour la classe Contact, ce qui signifie que vous pouvez trier l'ArrayList par le champ de nom à l'aide de la méthode Collections.sort() :
List<Contact> contacts = new ArrayList<>(); // Fill the list with contacts Collections.sort(contacts);
Définir un tri externe
Si vous devez trier par champs autres que le ordre naturel, vous pouvez créer un comparateur. Un comparateur fournit un mécanisme de tri externe et contrôlable :
Collections.sort(contacts, new Comparator<Contact>() { public int compare(Contact one, Contact other) { return one.getAddress().compareTo(other.getAddress()); } });
Ici, vous triez par adresse au lieu du champ de nom par défaut.
Réutilisation des comparateurs
Pour éviter de créer plusieurs Comparateurs, vous pouvez les définir dans la classe Contact lui-même :
public class Contact { // getters, setters, and other boilerplate public static Comparator<Contact> COMPARE_BY_PHONE = new Comparator<Contact>() { public int compare(Contact one, Contact other) { return one.phone.compareTo(other.phone); } }; }
Désormais, vous pouvez trier par téléphone à l'aide du comparateur prédéfini :
Collections.sort(contacts, Contact.COMPARE_BY_PHONE);
Comparateurs de haricots génériques
Pour le tri générique , pensez à utiliser un BeanComparator :
public class BeanComparator implements Comparator<Object> { private String getter; public BeanComparator(String field) { this.getter = "get" + field.substring(0, 1).toUpperCase() + field.substring(1); } public int compare(Object o1, Object o2) { // ... implementation ... } }
Cela permet de trier par n'importe quel bean field :
Collections.sort(contacts, new BeanComparator("phone"));
En implémentant un tri personnalisé, vous contrôlez la manière dont les ArrayLists sont triées, ce qui rend la manipulation des données plus efficace et s'aligne sur les exigences spécifiques de l'application.
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!