Maison > Java > javaDidacticiel > Comment puis-je trier correctement une liste d'objets personnalisés en Java à l'aide de comparateurs ?

Comment puis-je trier correctement une liste d'objets personnalisés en Java à l'aide de comparateurs ?

DDD
Libérer: 2024-12-25 06:16:09
original
539 Les gens l'ont consulté

How Can I Correctly Sort a List of Custom Objects in Java Using Comparators?

Utiliser des comparateurs pour trier des objets en Java

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

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

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

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

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal