Pengumpulan mengikut Pelbagai Medan dalam Java 8, Melangkaui Pengumpulan Medan Tunggal
Mengumpulkan objek mengikut medan tunggal ialah operasi biasa dalam pemprosesan data. Walau bagaimanapun, senario mungkin timbul apabila pengelompokan mengikut pelbagai medan diperlukan. Coretan kod awal yang disediakan menunjukkan pengumpulan mengikut medan umur. Artikel ini menyelidiki pilihan untuk mengumpulkan mengikut berbilang medan daripada POJO yang sama.
Pengumpul Rangkaian
Pendekatan mudah ialah merantai berbilang pengumpul. Kod di bawah menunjukkan teknik ini:
Map<String, Map<Integer, List<Person>>> map = people .collect(Collectors.groupingBy(Person::getName, Collectors.groupingBy(Person::getAge));
Dengan pendekatan ini, untuk mendapatkan semula senarai individu berumur 18 tahun bernama Fred:
map.get("Fred").get(18);
Menentukan Rekod Kumpulan
Mewujudkan kelas yang mewakili kumpulan ialah kaedah lain. Di sini, rekod digunakan untuk mewakili gabungan nama dan umur:
class Person { record NameAge(String name, int age) {} public NameAge getNameAge() { return new NameAge(name, age); } }
Kemudian, pengumpulan boleh dilakukan seperti berikut:
Map<NameAge, List<Person>> map = people.collect(Collectors.groupingBy(Person::getNameAge));
Untuk mencari dalam data terkumpul:
map.get(new NameAge("Fred", 18));
Menggunakan Kelas Berpasangan daripada Rangka Kerja Perpustakaan
Perpustakaan seperti Apache Commons menyediakan kelas berpasangan untuk jenis senario ini. Dengan kelas pasangan, kunci kepada peta boleh dibina sebagai:
Map<Pair<String, Integer>, List<Person>> map = people.collect(Collectors.groupingBy(p -> Pair.of(p.getName(), p.getAge())));
Untuk mendapatkan semula daripada peta:
map.get(Pair.of("Fred", 18));
Kesimpulan
Kaedah Java 8's Collectors.groupingBy() menyediakan fleksibiliti dalam mengumpulkan data. Artikel ini menunjukkan pendekatan yang berbeza untuk melanjutkan pengelompokan melangkaui satu medan, termasuk pengumpul rantai, mentakrifkan rekod kumpulan tersuai dan menggunakan kelas berpasangan daripada perpustakaan rangka kerja. Selain itu, rekod dalam Java menjadikannya lebih mudah untuk menentukan kriteria pengelompokan tanpa memerlukan kelas tersuai.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menghimpunkan Data mengikut Pelbagai Medan dalam Java 8 Menggunakan `Collectors.groupingBy()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!