Maison > Java > javaDidacticiel > Comment implémenter un tri personnalisé pour une liste d'objets en Java ?

Comment implémenter un tri personnalisé pour une liste d'objets en Java ?

Linda Hamilton
Libérer: 2024-12-30 07:47:40
original
371 Les gens l'ont consulté

How to Implement Custom Sorting for an ArrayList of Objects in Java?

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);
    }
}
Copier après la connexion

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);
Copier après la connexion

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());
    }
});
Copier après la connexion

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);
        }
    };
}
Copier après la connexion

Désormais, vous pouvez trier par téléphone à l'aide du comparateur prédéfini :

Collections.sort(contacts, Contact.COMPARE_BY_PHONE);
Copier après la connexion

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 ...
    }
}
Copier après la connexion

Cela permet de trier par n'importe quel bean field :

Collections.sort(contacts, new BeanComparator("phone"));
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal