1. Gambaran keseluruhan
Dalam artikel ini, kita akan melihat kelas Memesan dari perpustakaan Jambu.
The Susunan alat kelas Comparator muka dan memberi kita API fasih berguna untuk mencipta dan chaining comparators.
Sebagai sidenote cepat, perlu juga melihat API Comparator.comparing () baru - yang menyediakan fungsi yang serupa; berikut adalah contoh praktikal menggunakan API itu.
2. Membuat Susunan
Memesan mempunyai kaedah pembangun yang berguna yang mengembalikan contoh yang tepat yang dapat digunakan dalam metode semacam () pada koleksi atau di mana saja di mana contoh Perbandingan diperlukan.
Kita boleh membuat contoh pesanan semula jadi dengan melaksanakan kaedah semula jadi ():
List integers = Arrays.asList(3, 2, 1); integers.sort(Ordering.natural()); assertEquals(Arrays.asList(1,2,3), integers);
Katakan bahawa kita mempunyai koleksi objek Person :
class Person { private String name; private Integer age; // standard constructors, getters }
Dan kami ingin menyusun senarai objek tersebut mengikut bidang umur . Kami dapat membuat Pesanan khas kami yang akan melakukan dengan tepat dengan memperluasnya:
List persons = Arrays.asList(new Person("Michael", 10), new Person("Alice", 3)); Ordering orderingByAge = new Ordering() { @Override public int compare(Person p1, Person p2) { return Ints.compare(p1.age, p2.age); } }; persons.sort(orderingByAge); assertEquals(Arrays.asList(new Person("Alice", 3), new Person("Michael", 10)), persons);
Kemudian kita boleh menggunakan kaedah orderingByAge dan menyebarkannya ke sort () .
3. Urutan Rantai
Satu ciri berguna dari kelas ini ialah kita dapat mengaitkan pelbagai cara Pemesanan. Katakanlah kita mempunyai koleksi orang dan kita mahu mengisinya mengikut bidang umur dan mempunyai nilai bidang umur batal pada awal senarai:
List persons = Arrays.asList( new Person("Michael", 10), new Person("Alice", 3), new Person("Thomas", null)); Ordering ordering = Ordering .natural() .nullsFirst() .onResultOf(new Function() { @Override public Comparable apply(Person person) { return person.age; } }); persons.sort(ordering); assertEquals(Arrays.asList( new Person("Thomas", null), new Person("Alice", 3), new Person("Michael", 10)), persons);
Perkara penting yang perlu diperhatikan di sini adalah pesanan di mana Pesanan tertentu dilaksanakan - pesanan dari kanan ke kiri. Jadi pertama-tama onResultOf () dijalankan dan kaedah itu mengekstrak bidang yang ingin kita bandingkan.
Kemudian, pembanding nullFirst () dijalankan. Oleh kerana itu, koleksi yang disusun yang dihasilkan akan mempunyai objek Person yang mempunyai nol sebagai bidang umur pada awal senarai.
Pada akhir proses penyortiran, bidang usia dibandingkan menggunakan susunan semula jadi seperti yang ditentukan menggunakan kaedah semula jadi () .
4. Kesimpulan
Dalam artikel ini, kami melihat kelas Pemesanan dari perpustakaan Jambu yang membolehkan kami membuat Komparator yang lebih lancar dan elegan . Kami membuat Pemesanan khusus kami , kami menggunakan pesanan yang telah ditentukan dari API, dan kami mengikatnya untuk mencapai lebih banyak pesanan tersuai.
Pelaksanaan semua contoh dan coretan kod ini boleh didapati di projek GitHub - ini adalah projek berasaskan Maven, jadi mudah diimport dan dijalankan sebagaimana adanya.