Rumah > Java > javaTutorial > teks badan

Bagaimana untuk Menghimpunkan Mengikut Pelbagai Medan dalam Java 8 Menggunakan `Collectors.groupingBy()`?

Susan Sarandon
Lepaskan: 2024-11-24 16:28:12
asal
952 orang telah melayarinya

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

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

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

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

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:

  • Jika anda memerlukan cara yang mudah dan mudah untuk mengumpulkan mengikut pelbagai medan, pengumpul rantai ialah penyelesaian pragmatik.
  • Jika anda lebih suka pendekatan yang lebih terkapsul yang menjadikan niat pengelompokan eksplisit, mentakrifkan kelas kumpulan atau menggunakan kelas pasangan disyorkan.
  • Ketersediaan rekod dalam versi Java >= 16 memudahkan penciptaan kelas pengelompokan, menjadikannya pilihan pilihan untuk kejelasan dan kebolehselenggaraan.

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!

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