„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie sortiere ich Sammlungen mithilfe von Java 8 Lambda effizient nach mehreren Feldern?

Wie sortiere ich Sammlungen mithilfe von Java 8 Lambda effizient nach mehreren Feldern?

Veröffentlicht am 06.11.2024
Durchsuche:429

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

Sammlungen mit mehreren Feldern mit Java 8 Lambda sortieren

Der bereitgestellte Sortiercode erscheint unvollständig und erzeugt möglicherweise nicht die erwartete Sortierreihenfolge. Lassen Sie uns in einen effizienteren und umfassenderen Ansatz mit Java 8-Lambdas eintauchen.

mit Java 8-Lambdas

Java 8 vereinfacht die Listensortierung durch die Bereitstellung intuitiver Lambda-Ausdrücke, die eine präzise und leicht lesbare Darstellung ermöglichen Code. Betrachten Sie Folgendes:

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

Dieser Lambda-basierte Ansatz sequenziert den Vergleichsprozess und sortiert die Liste effektiv basierend auf den angegebenen Feldern in der durch die Methode .thenComparing() definierten Rangfolge.

Originalcode-Analyse

Der von Ihnen bereitgestellte Originalcode verkettet die Zeichenfolgen für den Berichtsschlüssel, die Schülernummer und die Schule:

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

Stattdessen sollten Sie für eine ordnungsgemäße Sortierung die Felder unabhängig voneinander vergleichen.

Erweiterte Sortierfunktion

Hier ist eine erweiterte Version der Sortierfunktion mit der Lambda-Syntax:

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());});

Dieser Code vergleicht die einzelnen Felder direkt und sorgt so für eine genauere Sortierreihenfolge.

Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3