Maison >Java >javaDidacticiel >Comment puis-je trier les objets Java selon plusieurs propriétés à l'aide de comparateurs et d'expressions Lambda ?

Comment puis-je trier les objets Java selon plusieurs propriétés à l'aide de comparateurs et d'expressions Lambda ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-30 12:35:15641parcourir

How Can I Sort Java Objects by Multiple Properties Using Comparators and Lambda Expressions?

Tri des objets Java par propriété

Le tri des objets par propriétés spécifiques est une tâche courante dans la programmation Java. Considérons un scénario dans lequel nous avons une liste d'objets ActiveAlarm. Ces objets ont diverses propriétés, notamment timeStarted et timeEnded.

Pour trier cette liste en fonction de timeStarted puis de timeEnded par ordre croissant, nous pouvons utiliser les algorithmes de tri de Java.

Utilisation de l'interface de comparaison

Une approche consiste à implémenter une interface Comparator. Un comparateur fournit un moyen de comparer deux objets et fournit un ordre croissant ou décroissant en fonction du résultat de la comparaison. Voici comment procéder :

public class ActiveAlarmComparator implements Comparator<ActiveAlarm> {

    @Override
    public int compare(ActiveAlarm o1, ActiveAlarm o2) {
        // Compare timeStarted first
        int timeStartedComparison = Long.compare(o1.getTimeStarted(), o2.getTimeStarted());

        // If timeStarted is equal, compare timeEnded
        if (timeStartedComparison == 0) {
            return Long.compare(o1.getTimeEnded(), o2.getTimeEnded());
        }

        // Return the comparison result for timeStarted
        return timeStartedComparison;
    }
}

Maintenant, nous pouvons trier la liste à l'aide du comparateur :

List<ActiveAlarm> alarms = new ArrayList<>();

// ... populate the alarms list

Collections.sort(alarms, new ActiveAlarmComparator());

Utilisation des expressions Java 8 Lambda

Pour les versions Java 8 et supérieures, nous pouvons utiliser des expressions lambda pour simplifier le Comparateur implémentation :

Collections.sort(alarms, Comparator.comparingLong(ActiveAlarm::getTimeStarted)
                            .thenComparingLong(ActiveAlarm::getTimeEnded));

Cette expression lambda représente une interface fonctionnelle qui définit la logique de comparaison pour timeStarted et timeEnded. La méthode Comparator.comparingLong() crée un Comparator basé sur la fonction donnée, qui compare les valeurs de propriété sous forme d'entiers longs.

L'utilisation d'un Comparator ou d'expressions lambda fournit un moyen polyvalent et efficace de trier des objets Java en fonction de critères spécifiques. propriétés, facilitant la manipulation et l'analyse des données.

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!

Déclaration:
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