Maison >Java >javaDidacticiel >Comment trier efficacement les collections par 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.
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().
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.
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!