Pengumpulan mengikut Pelbagai Medan dalam Java 8
Dalam Java 8, kaedah Collectors.groupingBy() biasanya digunakan untuk mengumpulkan objek berdasarkan bidang tertentu. Namun, bagaimana jika anda perlu mengumpulkan mengikut berbilang medan daripada POJO yang sama?
Terdapat beberapa pilihan yang tersedia:
Pengumpul Rantai
Map<String, Map<Integer, List<Person>>> map = people .collect(Collectors.groupingBy(Person::getName, Collectors.groupingBy(Person::getAge));
Kod ini mengumpulkan objek Orang dahulu mengikut nama dan kemudian mengikut umur, menghasilkan peta bersarang struktur.
Mentakrifkan Kelas Pengelompokan
class Person { record NameAge(String name, int age) { } public NameAge getNameAge() { return new NameAge(name, age); } } Map<NameAge, List<Person>> map = people.collect(Collectors.groupingBy(Person::getNameAge));
Dengan mencipta rekod atau kelas yang merangkum kriteria pengelompokan (cth., Nama Umur), anda boleh mengumpulkan secara terus mengikut medan yang diingini.
Menggunakan Sepasang Kelas
import org.apache.commons.lang3.tuple.Pair; Map<Pair<String, Integer>, List<Person>> map = people .collect(Collectors.groupingBy(p -> Pair.of(p.getName(), p.getAge())));
Jika anda menggunakan pustaka pihak ketiga, anda boleh memanfaatkan kelas pasangannya untuk mewakili kriteria pengelompokan.
Memilih Pilihan Terbaik
Pilihan pendekatan bergantung pada keperluan khusus anda projek:
Atas ialah kandungan terperinci Bagaimana untuk Menghimpunkan Mengikut Pelbagai Medan dalam Java 8 Menggunakan `Collectors.groupingBy()`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!