如果我有Map<User, List<Foo>>
map1的映射,其中Foo如下所示:
Foo
User
id
name
age
id在所有Foos中都是独一无二的,我正在寻找一种转换Map&gt;的方法。到Map<Integer, Foo>
的地图,其中键是foo id。我已尝试过以下内容,但只能查看Map<Integer, List<Foo>>
:
Map<Integer, List<Foo>> idToListOfFoo = originalMap.values().stream()
.flatMap(List::stream)
.collect(Collectors.groupingBy(Foo::getId));
如何有效地实现这一目标?
答案 0 :(得分:4)
这是一个收藏家。它被称为toMap
。你这样使用它:
Map<Integer, Foo> idToListOfFoo = originalMap.values().stream()
.flatMap(List::stream)
.collect(Collectors.toMap(Foo::getId, Function.identity()));
toMap
将2个函数作为参数:第一个用于从元素获取键,第二个用于获取地图的值。
Function.identity()
返回一个只返回其输入的函数。因此,键是id,值是结果映射中的对象本身。