Heim  >  Artikel  >  Java  >  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
Mary-Kate OlsenOriginal
2024-10-28 07:25:02136Durchsuche

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>

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>

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>

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!

Stellungnahme:
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