Java 通过展平操作将一个哈希映射转换为另一个哈希映射

Java 通过展平操作将一个哈希映射转换为另一个哈希映射,java,java-8,Java,Java 8,如果我有一个来自Mapmap1的映射,其中Foo如下所示: Foo User id name age id在所有foo中都是唯一的,我正在寻找一种方法将Map>转换为Map的Map,其中键是foo id。我尝试了以下方法,但只能转换为Map: Map idToListOfFoo=originalMap.values().stream() .flatMap(列表::流) .collect(收集器.groupingBy(Foo::getId)); 如何有效地实现这一点?有一个收集器。它被称为。您

如果我有一个来自
Map
map1的映射,其中Foo如下所示:

Foo
User
id
name
age
id在所有foo中都是唯一的,我正在寻找一种方法将Map>转换为
Map
的Map,其中键是foo id。我尝试了以下方法,但只能转换为
Map

Map idToListOfFoo=originalMap.values().stream()
.flatMap(列表::流)
.collect(收集器.groupingBy(Foo::getId));

如何有效地实现这一点?

有一个收集器。它被称为。您可以这样使用它:

Map<Integer, Foo> idToListOfFoo = originalMap.values().stream()
        .flatMap(List::stream)
        .collect(Collectors.toMap(Foo::getId,  Function.identity()));
Map idToListOfFoo=originalMap.values().stream()
.flatMap(列表::流)
.collect(Collectors.toMap(Foo::getId,Function.identity());
toMap
使用两个函数作为参数:第一个函数用于从元素获取键,第二个函数用于获取映射的值


返回一个只返回其输入的函数。因此,键是id,值是结果映射中的对象本身。

为此有一个收集器。它被称为。您可以这样使用它:

Map<Integer, Foo> idToListOfFoo = originalMap.values().stream()
        .flatMap(List::stream)
        .collect(Collectors.toMap(Foo::getId,  Function.identity()));
Map idToListOfFoo=originalMap.values().stream()
.flatMap(列表::流)
.collect(Collectors.toMap(Foo::getId,Function.identity());
toMap
使用两个函数作为参数:第一个函数用于从元素获取键,第二个函数用于获取映射的值

返回一个只返回其输入的函数。因此,键是id,值是结果映射中的对象本身