假设我有一个如下所示的对象列表:
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/