Rumah > Java > javaTutorial > teks badan

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

Patricia Arquette
Lepaskan: 2024-11-24 10:27:11
asal
652 orang telah melayarinya

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));
Salin selepas log masuk

Dengan pendekatan ini, untuk mendapatkan semula senarai individu berumur 18 tahun bernama Fred:

map.get("Fred").get(18);
Salin selepas log masuk

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);
    }
}
Salin selepas log masuk

Kemudian, pengumpulan boleh dilakukan seperti berikut:

Map<NameAge, List<Person>> map = people.collect(Collectors.groupingBy(Person::getNameAge));
Salin selepas log masuk

Untuk mencari dalam data terkumpul:

map.get(new NameAge("Fred", 18));
Salin selepas log masuk

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())));
Salin selepas log masuk

Untuk mendapatkan semula daripada peta:

map.get(Pair.of("Fred", 18));
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan