Maison >Java >javaDidacticiel >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 ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-28 07:25:02250parcourir

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>

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>

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>

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!

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