Comment trier une collection d'objets personnalisés par plusieurs propriétés
Collections.sort s'avère utile pour trier des types de données simples tels que des chaînes. Cependant, lorsqu'il s'agit d'objets personnalisés, le tri basé sur des propriétés spécifiques peut s'avérer difficile.
Considérez une classe Person avec des propriétés telles que le nom, l'âge et le pays. Pour trier une liste d'objets Personne, nous avons besoin d'une approche personnalisée.
Présentation de l'interface Comparator
La solution réside dans la mise en œuvre de l'interface Comparator, qui fournit une méthode de comparaison pour définir un ordre de tri. En remplaçant la méthode compare(), nous pouvons spécifier la logique de tri en fonction de la propriété souhaitée.
public class PersonComparator implements Comparator<Person> { // Define the sorting order as an enum public enum Order { NAME, AGE, COUNTRY } private Order sortingBy = Order.NAME; @Override public int compare(Person person1, Person person2) { switch (sortingBy) { case NAME: return person1.getName().compareTo(person2.getName()); case AGE: return person1.getAge().compareTo(person2.getAge()); case COUNTRY: return person1.getCountry().compareTo(person2.getCountry()); default: throw new RuntimeException("Invalid sorting order"); } } // Method to set the sorting order public void setSortingBy(Order sortingBy) { this.sortingBy = sortingBy; } }
Utilisation du comparateur
Pour trier la personList par un propriété spécifique, nous pouvons créer une instance de PersonComparator et définir l'ordre de tri souhaité.
public void sortPersonList(Order sortingBy) { PersonComparator comparator = new PersonComparator(); comparator.setSortingBy(sortingBy); Collections.sort(personList, comparator); }
En appelant le sortPersonList() avec l’ordre de tri approprié, nous pouvons obtenir une liste triée en fonction de la propriété spécifiée. Cette approche offre de la flexibilité et permet de trier selon plusieurs propriétés sans modifier la classe Person elle-même.
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!