Rumah >Java >javaTutorial >Bagaimanakah Saya Boleh Menghimpunkan Data mengikut Pelbagai Medan dalam Java 8 Menggunakan `Collectors.groupingBy()`?

Bagaimanakah Saya Boleh Menghimpunkan Data mengikut Pelbagai Medan dalam Java 8 Menggunakan `Collectors.groupingBy()`?

Patricia Arquette
Patricia Arquetteasal
2024-11-24 10:27:11735semak imbas

How Can I Group Data by Multiple Fields in Java 8 Using `Collectors.groupingBy()`?

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!

Kenyataan:
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