java - 使用groupBy将列表转换为 map

标签 java java-8

假设我有一个如下所示的对象列表:

Foo
int id
Owner owner
int targetId

我想将此列表转换为 Map<Owner, Set<Integer>> 的映射OwnerToTargetIds 将为 Foo 对象列表中找到的每个唯一所有者提供一个键,并为该所有者的每个 foo 对象中找到的所有 targetId 提供一个值。例如:

Foo a {1, 2, 3}
Foo b {2, 2, 4}
Foo c {3, 2, 5}

在上面,您可以将此列表转换为键 = 2、值 = Set{3,4,5} 的映射。

我尝试使用流中的分组功能来获得从所有者到整个记录的映射,但这实际上不起作用:

Map<Owner, List<Foo>> userToTargetIds = foo.get().stream()
                    .collect(toMap(Foo::getTargetId));

最佳答案

正如 JB Nizet 所说:RTM

但是这里被剪掉了:

Map<Owner, Set<Integer>> userToTargetIds
         = fooList.stream().collect(groupingBy(Foo::getOwner,
                                              mapping(Foo::getTargetId, toSet())));

关于java - 使用groupBy将列表转换为 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39921967/

相关文章:

java - 如何从java中的多部分请求中获取值

java - Maven 多模块项目中的 Spring 依赖注入(inject)

java - 如何在Android项目中使用Java中的weightSum?

java - 如何将复制构造函数作为方法引用传递?

jpa - Java 8 Spring Data JPA 参数绑定(bind)

java - 记录 selenium 测试并从 Java 运行它们

java - IE + Selenium : Is there any way to disable pop-up blocker programmatically in IE

java - 你有 Java 8 功能接口(interface)列表吗(不是 java.util.function 中列出的那些)?

java - 在可完成的 future 之内/之后抛出异常

java - Bicycle[]::new 的等价物是什么