Heim > Java > javaLernprogramm > Wie sortiere ich Sammlungen effizient nach mehreren Feldern mit Java 8 Lambda?

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

Mary-Kate Olsen
Freigeben: 2024-10-28 07:25:02
Original
250 Leute haben es durchsucht

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

Sammlungen mit mehreren Feldern mithilfe von Java 8 Lambdas 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.

Verwendung von 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. Bedenken Sie Folgendes:

<code class="java">Collections.sort(reportList, Comparator.comparing(Report::getReportKey)
            .thenComparing(Report::getStudentNumber)
            .thenComparing(Report::getSchool));</code>
Nach dem Login kopieren

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:

<code class="java">return (record1.getReportKey() + record1.getStudentNumber() + record1.getSchool())
        .compareTo(record2.getReportKey() + record2.getStudentNumber() + record2.getSchool());</code>
Nach dem Login kopieren

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

Erweiterte Sortierfunktion

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

<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>
Nach dem Login kopieren

Dieser Code vergleicht die einzelnen Felder direkt und bietet so mehr genaue Sortierreihenfolge.

Das obige ist der detaillierte Inhalt vonWie sortiere ich Sammlungen effizient nach mehreren Feldern mit Java 8 Lambda?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage