"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment trier efficacement les collections par plusieurs champs à l'aide de Java 8 Lambda ?

Comment trier efficacement les collections par plusieurs champs à l'aide de Java 8 Lambda ?

Publié le 2024-11-06
Parcourir:151

How to Sort Collections by Multiple Fields Efficiently Using Java 8 Lambda\'s?

Tri des collections avec plusieurs champs à l'aide de Java 8 Lambda

Le code de tri fourni semble incomplet et peut ne pas produire l'ordre de tri attendu. Passons à une approche plus efficace et plus complète en utilisant Java 8 lambda.

en utilisant Java 8 lambda

Java 8 simplifie le tri des listes en fournissant des expressions lambda intuitives qui permettent des expressions concises et faciles à lire. code. Considérez les éléments suivants :

Collections.sort(reportList, Comparator.comparing(Report::getReportKey)
            .thenComparing(Report::getStudentNumber)
            .thenComparing(Report::getSchool));

Cette approche basée sur lambda séquence le processus de comparaison, triant efficacement la liste en fonction des champs spécifiés dans l'ordre de priorité défini par la méthode .thenComparing().

Analyse du code d'origine

Le code d'origine que vous avez fourni concatène les chaînes de la clé de rapport, du numéro d'élève et de l'école :

return (record1.getReportKey()   record1.getStudentNumber()   record1.getSchool())
        .compareTo(record2.getReportKey()   record2.getStudentNumber()   record2.getSchool());

Au lieu de cela, pour un tri correct, vous devez comparer les champs indépendamment.

Fonction de tri améliorée

Voici une version améliorée de la fonction de tri utilisant la syntaxe lambda :

Collections.sort(reportList, (record1, record2) -> {
        int reportKeyComparison = record1.getReportKey().compareTo(record2.getReportKey());
        if (reportKeyComparison != 0) {
            return reportKeyComparison;
        }

        int studentNumberComparison = record1.getStudentNumber().compareTo(record2.getStudentNumber());
        if (studentNumberComparison != 0) {
            return studentNumberComparison;
        }

        return record1.getSchool().compareTo(record2.getSchool());});

Ce code compare directement les champs individuels, fournissant un ordre de tri plus précis.

Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3