Maison > Java > javaDidacticiel > le corps du texte

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

Mary-Kate Olsen
Libérer: 2024-10-28 07:25:02
original
146 Les gens l'ont consulté

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. Plongeons dans une approche plus efficace et plus complète en utilisant les lambda de Java 8.

l'utilisation des lambda de Java 8

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

<code class="java">Collections.sort(reportList, Comparator.comparing(Report::getReportKey)
            .thenComparing(Report::getStudentNumber)
            .thenComparing(Report::getSchool));</code>
Copier après la connexion

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é du rapport, du numéro d'élève et de l'école :

<code class="java">return (record1.getReportKey() + record1.getStudentNumber() + record1.getSchool())
        .compareTo(record2.getReportKey() + record2.getStudentNumber() + record2.getSchool());</code>
Copier après la connexion

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 :

<code class="java">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());});</code>
Copier après la connexion

Ce code compare directement les champs individuels, offrant une plus grande ordre de tri précis.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!