Anda menggunakan groupingBy kaedah satu parameter, yang hanya boleh menghantar satu parameter Function sebagai fungsi pemetaan Kunci
Tetapi sebenarnya Collectors.groupingBy mempunyai kaedah dengan paling banyak tiga parameter Dua parameter lain dan satu parameter hanyalah lebihan daripada kaedah tiga parameter, jadi anda perlu memproses data Nilai terkumpul Anda perlu memahami keupayaan kaedah tiga parameter menyediakan
Collector<T, ?, M> groupingBy(Function<? super T, ? extends K> classifier,
Supplier<M> mapFactory,
Collector<? super T, A, D> downstream) {
Anda boleh melihat bahawa terdapat tiga parameter Parameter pertama ialah kunci Function Parameter kedua ialah kilang peta, yang merupakan bekas hasil akhir satu ialah Parameter yang sangat penting ialah HashMap::new, jenisnya ialah downstream, dan ia juga merupakan pengumpul, maksudnya, ketiga-tiga parameter ini sebenarnya digunakan untuk menyelesaikan masalah pengelompokan Collector
Parameter pertama: klasifikasi apakah berdasarkan kumpulan
Parameter kedua: bekas apa yang digunakan untuk menyimpan kumpulan pada akhirnya dan mengembalikan
Parameter ketiga: selepas mengelas mengikut parameter pertama, cara mengumpul hasil pengelasan yang sepadan
Untuk merumuskan perkara di atas, anda perlu lulus parameter ketiga untuk mencapai tujuan yang anda mahu
Seperti yang dinyatakan sebelum ini, parameter kedua lalai kepada , jadi anda boleh menggunakan HashMap::newDua kaedah parameter, sebagai anda boleh lihat di bawah, parameter kedua ialah Collectors.groupingByHashMap::new
public static <T, K, A, D>
Collector<T, ?, Map<K, D>> groupingBy(Function<? super T, ? extends K> classifier,
Collector<? super T, A, D> downstream) {
return groupingBy(classifier, HashMap::new, downstream);
}
Malah, pengumpul parameter ketiga kaedah
satu parameter sebenarnya lalai kepada Collectors.groupingBy, jadi jenis terakhir yang dikembalikan oleh apa yang anda tulis di atas ialah Collectors.toListMap<String, List>
Oleh kerana saya tidak tahu jenis data koleksi anda, saya tidak boleh memberikan contoh kepada anda
Student
String type
int score
String name
List<Student> students = new ArrayList<>()
// 每个学生类型的总分数
Map<String, Integer> map1 =
students.stream.collect(Collectors.groupingBy(Student::getType, Collectors.summingInt(Student::getScore))));
// 每个学生类型中的得分最高的那个学生
Map<String, Optional<Student>> map2 = students.stream.collect(Collectors.groupingBy(Student::getType, Collectors.maxBy(Comparator.comparing(Student::getScore))));
Apa pun, anda juga boleh menemui banyak pengumpul parameter ketiga mengikut
Jika ia tidak berfungsi, anda boleh menyesuaikan pengumpul tersebut. Saya harap ia dapat membantu anda Collectors
Anda menggunakan
groupingBy
kaedah satu parameter, yang hanya boleh menghantar satu parameterFunction
sebagai fungsi pemetaan KunciTetapi sebenarnya
Collectors.groupingBy
mempunyai kaedah dengan paling banyak tiga parameter Dua parameter lain dan satu parameter hanyalah lebihan daripada kaedah tiga parameter, jadi anda perlu memproses data Nilai terkumpul Anda perlu memahami keupayaan kaedah tiga parameter menyediakanAnda boleh melihat bahawa terdapat tiga parameter Parameter pertama ialah kunci
Function
Parameter kedua ialah kilang peta, yang merupakan bekas hasil akhir satu ialah Parameter yang sangat penting ialahHashMap::new
, jenisnya ialahdownstream
, dan ia juga merupakan pengumpul, maksudnya, ketiga-tiga parameter ini sebenarnya digunakan untuk menyelesaikan masalah pengelompokanCollector
Seperti yang dinyatakan sebelum ini, parameter kedua lalai kepada
Malah, pengumpul parameter ketiga kaedah, jadi anda boleh menggunakan
HashMap::new
Dua kaedah parameter, sebagai anda boleh lihat di bawah, parameter kedua ialahCollectors.groupingBy
HashMap::new
satu parameter sebenarnya lalai kepada
Oleh kerana saya tidak tahu jenis data koleksi anda, saya tidak boleh memberikan contoh kepada andaCollectors.groupingBy
, jadi jenis terakhir yang dikembalikan oleh apa yang anda tulis di atas ialahCollectors.toList
Map<String, List>
Jika ia tidak berfungsi, anda boleh menyesuaikan pengumpul tersebut. Saya harap ia dapat membantu anda
Collectors