Rumah > Java > javaTutorial > teks badan

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

Mary-Kate Olsen
Lepaskan: 2024-10-28 07:25:02
asal
146 orang telah melayarinya

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!