我有一张地图地图,格式为
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。
答案 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。