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

aqu*_*ind 2 java lambda

我有格式的地图地图

Map < Integer, Map < String, Integer >>
Run Code Online (Sandbox Code Playgroud)

如果我有格式的数据

<1>, << X, 11 >, < Y, 13 >, < Z, 15 >>
<2>, << X,12 >, < A, 23 >, < L, 41 >> 
Run Code Online (Sandbox Code Playgroud)

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

<1>, <[11, 13, 15]>
<2>, <[12, 23, 41]> 
Run Code Online (Sandbox Code Playgroud)

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

Aar*_*ron 6

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

input.entrySet().stream()
                .collect(Collectors.toMap(e->e.getKey(),
                                          e->new ArrayList(e.getValue().values())));
Run Code Online (Sandbox Code Playgroud)

在这段代码中,我们收集Entry<Integer, Map<String, Integer>>Map<Integer, List<Integer>>通过变换它们,这样的值将成为List<Integer>内部地图的价值,而键保持不变.

你可以在这里测试一下.

  • `values`返回一个`Collection`,你需要把它重新收回到`List`. (2认同)