gpt4 book ai didi

java - 使用 Java 流对集合进行分组

转载 作者:行者123 更新时间:2023-11-30 07:45:19 25 4
gpt4 key购买 nike

我遇到了一些困难来找到一个漂亮的代码来完成以下事情(以下用例只是一个例子):

用例:

我有学生,每个学生都有一本藏书。对于每本书,我需要知道哪个学生拥有它。请注意,一本书可以由多个学生拥有。

代码:我有一个 Set<Student>作为输入,我需要创建一个 Map<Book, Set<Student>>作为输出。


我知道如何不使用 lambda 和流来做到这一点,但我想学习如何使用它。

目前,我已经创建了一个中间内部类 (Tuple(Book,Student)) 来实现它,但它看起来很脏,我得到了一个 Map<Book, Tuple<Book, Student>>这并不完全符合我的需求。

students.parallelStream()
.flatMap(student-> student.getBooks().parallelStream()
.map(book -> new Tuple(book, student)))
.collect(Collectors.groupingBy(tuple-> tuple.book, Collectors.toSet()))

最佳答案

您可以使用 Collectors.mapping 在收集期间转换元组:

Map<Book, Set<Student>> result = students.parallelStream()
.flatMap(student -> student.getBooks()
.parallelStream()
.map(book -> new Tuple(book, student)))
.collect(Collectors.groupingBy(tuple -> tuple.book,
Collectors.mapping(tuple -> tuple.student, Collectors.toSet())));

关于java - 使用 Java 流对集合进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51864016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com