使用Java 8中的Lambda从地图地图生成地图

时间:2017-01-27 14:29:36

标签: java lambda

我有一张地图地图,格式为

Map < Integer, Map < String, Integer >>

如果我的数据格式为

<1>, << X, 11 >, < Y, 13 >, < Z, 15 >>
<2>, << X,12 >, < A, 23 >, < L, 41 >> 

如何使用Java 8 lambda处理它并生成以下内容

<1>, <[11, 13, 15]>
<2>, <[12, 23, 41]> 

这将生成另一个Map,其中键是外部地图的键,值是内部Map的值的List。我知道如何以常规方式执行此操作,但我正在研究如何使用Java 8 Lambda。

1 个答案:

答案 0 :(得分:6)

您可以使用Collectors.toMap重新创建Map<Integer, List<Integer>>

input.entrySet().stream()
                .collect(Collectors.toMap(e->e.getKey(),
                                          e->new ArrayList(e.getValue().values())));

在这段代码中,我们通过转换它们将Entry<Integer, Map<String, Integer>>收集到Map<Integer, List<Integer>>中,以便该值成为内部地图值的List<Integer>,而密钥保留在相同。

您可以对其进行测试here