通过展平操作将一个散列映射转换为另一个散列映射

时间:2016-09-25 20:16:36

标签: java java-8

如果我有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));

如何有效地实现这一目标?

1 个答案:

答案 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,值是结果映射中的对象本身。