Rumah  >  Artikel  >  Java  >  Bagaimana untuk Mengisih Koleksi mengikut Pelbagai Medan Dengan Cekap Menggunakan Java 8 Lambda's?

Bagaimana untuk Mengisih Koleksi mengikut Pelbagai Medan Dengan Cekap Menggunakan Java 8 Lambda's?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-28 07:25:02136semak imbas

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

Mengisih Koleksi dengan Berbilang Medan Menggunakan Java 8 Lambda

Kod pengisihan yang disediakan kelihatan tidak lengkap dan mungkin tidak menghasilkan susunan disusun yang dijangkakan. Mari kita selami pendekatan yang lebih cekap dan komprehensif menggunakan Java 8 lambda.

menggunakan Java 8 lambda

Java 8 memudahkan pengisihan senarai dengan menyediakan ungkapan lambda intuitif yang membolehkan ringkas dan mudah dibaca kod. Pertimbangkan perkara berikut:

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

Pendekatan berasaskan lambda ini mengurutkan proses perbandingan, dengan berkesan mengisih senarai berdasarkan medan yang ditentukan dalam susunan keutamaan yang ditakrifkan oleh kaedah .thenComparing().

Analisis Kod Asal

Kod asal yang anda berikan menggabungkan rentetan untuk kunci laporan, nombor pelajar dan sekolah:

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

Sebaliknya, untuk pengisihan yang betul, anda harus membandingkan medan secara bebas.

Fungsi Isih Dipertingkat

Berikut ialah versi dipertingkatkan fungsi isihan menggunakan sintaks 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>

Kod ini membandingkan secara langsung medan individu, memberikan lebih banyak susunan isihan tepat.

Atas ialah kandungan terperinci Bagaimana untuk Mengisih Koleksi mengikut Pelbagai Medan Dengan Cekap Menggunakan Java 8 Lambda's?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn