


Mengapakah Pendekatan Lambda Java 8 Cara Terbaik untuk Mengisih Objek dengan Pelbagai Medan?
Menggunakan Java 8 lambda (ditambah pada 10 April 2019)
Versi kod ini memanfaatkan Java 8 lambda untuk mencapai hasil pengisihan yang diingini:
<code class="java">Collections.sort(reportList, Comparator.comparing(Report::getReportKey) .thenComparing(Report::getStudentNumber) .thenComparing(Report::getSchool));</code>
Kunci di sini ialah menggunakan kaedah thenComparing untuk mencipta rantaian pembanding. Setiap pembanding dalam rantai membandingkan salah satu medan dalam objek Laporan. Pembanding yang terhasil kemudiannya digunakan untuk mengisih senarai.
Pendekatan ini ringkas, mudah dibaca dan selamat menaip. Ia juga mempunyai kelebihan malas menilai getter, bermakna getter hanya dipanggil apabila ia diperlukan untuk perbandingan.
Kucar-kacir dan berbelit-belit: Menyusun menggunakan tangan
Kod asal, yang diisih menggunakan tangan, adalah verbose dan mudah ralat. Ia memerlukan banyak menaip dan penyelenggaraan, dan ia adalah mudah untuk membuat kesilapan semasa menulis logik perbandingan. Begini rupanya:
<code class="java">Collections.sort(reportList, new Comparator<Report>() { @Override public int compare(Report record1, Report record2) { return (record1.getReportKey() + record1.getStudentNumber() + record1.getSchool()) .compareTo(record2.getReportKey() + record2.getStudentNumber() + record2.getSchool()); } });</code>
Pendekatan ini tidak disyorkan untuk mengisih objek dengan berbilang medan.
Cara reflektif: Isih dengan BeanComparator
Pendekatan BeanComparator menggunakan refleksi untuk membandingkan medan objek Laporan. Pendekatan ini lebih ringkas daripada menyusun dengan tangan, tetapi ia juga lebih mudah ralat dan lebih perlahan. Begini rupanya:
<code class="java">ComparatorChain chain = new ComparatorChain(Arrays.asList( new BeanComparator("reportKey"), new BeanComparator("studentNumber"), new BeanComparator("school"))); Collections.sort(reportList, chain); </code>
Pendekatan ini tidak disyorkan untuk mengisih objek dengan berbilang medan.
Sampai ke sana: Isih dengan ComparisonChain Google Guava
Pendekatan Google Guava ComparisonChain adalah serupa dengan pendekatan BeanComparator, tetapi ia lebih fleksibel dan lebih pantas. Begini rupanya:
<code class="java">Collections.sort(reportList, new Comparator<Report>() { @Override public int compare(Report p1, Report p2) { return ComparisonChain.start().compare(p1.getReportKey(), p2.getReportKey()).compare(p1.getStudentNumber(), p2.getStudentNumber()).compare(p1.getSchool(), p2.getSchool()).result(); } }); </code>
Pendekatan ini ialah pilihan yang baik untuk mengisih objek dengan berbilang medan, tetapi ia tidak seringkas pendekatan Java 8 lambda.
Pendekatan Apache Commons CompareToBuilder adalah serupa dengan pendekatan Google Guava ComparisonChain, tetapi ia kurang fleksibel. Begini rupanya:
<code class="java">Collections.sort(reportList, new Comparator<Report>() { @Override public int compare(Report p1, Report p2) { return new CompareToBuilder().append(p1.getReportKey(), p2.getReportKey()).append(p1.getStudentNumber(), p2.getStudentNumber()).append(p1.getSchool(), p2.getSchool()).toComparison(); } }); </code>
Pendekatan ini ialah pilihan yang baik untuk mengisih objek dengan berbilang medan, tetapi ia tidak seringkas pendekatan Java 8 lambda.
Akhirnya, pendekatan terbaik untuk mengisih objek dengan berbilang medan bergantung pada keperluan khusus aplikasi. Pendekatan lambda Java 8 adalah yang paling ringkas dan selamat jenis, tetapi ia memerlukan Java 8 atau lebih baru. Pendekatan Google Guava ComparisonChain ialah pilihan yang baik untuk aplikasi yang memerlukan lebih banyak fleksibiliti daripada pendekatan Java 8 lambda, tetapi ia tidak begitu ringkas. Pendekatan Apache Commons CompareToBuilder ialah pilihan yang baik untuk aplikasi yang memerlukan kurang fleksibiliti daripada pendekatan Google Guava ComparisonChain, tetapi ia tidak begitu ringkas.
Atas ialah kandungan terperinci Mengapakah Pendekatan Lambda Java 8 Cara Terbaik untuk Mengisih Objek dengan Pelbagai Medan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Penyelesaian masalah dan penyelesaian kepada perisian keselamatan syarikat yang menyebabkan beberapa aplikasi tidak berfungsi dengan baik. Banyak syarikat akan menggunakan perisian keselamatan untuk memastikan keselamatan rangkaian dalaman. …

Penyelesaian untuk menukar nama kepada nombor untuk melaksanakan penyortiran dalam banyak senario aplikasi, pengguna mungkin perlu menyusun kumpulan, terutama dalam satu ...

Pemprosesan pemetaan medan dalam dok sistem sering menemui masalah yang sukar ketika melaksanakan sistem dok: bagaimana untuk memetakan medan antara muka sistem dengan berkesan ...

Mula musim bunga menggunakan versi IntelliJideaultimate ...

Apabila menggunakan Mybatis-Plus atau Rangka Kerja ORM yang lain untuk operasi pangkalan data, sering diperlukan untuk membina syarat pertanyaan berdasarkan nama atribut kelas entiti. Sekiranya anda secara manual setiap kali ...

Penukaran objek dan tatasusunan Java: Perbincangan mendalam tentang risiko dan kaedah penukaran jenis cast yang betul Banyak pemula Java akan menemui penukaran objek ke dalam array ...

Penjelasan terperinci mengenai reka bentuk jadual SKU dan SPU di platform e-dagang Artikel ini akan membincangkan isu reka bentuk pangkalan data SKU dan SPU dalam platform e-dagang, terutamanya bagaimana menangani jualan yang ditentukan pengguna ...

Bagaimanakah penyelesaian caching Redis menyedari keperluan senarai kedudukan produk? Semasa proses pembangunan, kita sering perlu menangani keperluan kedudukan, seperti memaparkan ...
