Heim >Java >javaLernprogramm >Wie sortiere ich Sammlungen effizient nach mehreren Feldern mit Java 8 Lambda?
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.
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.
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.
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!