Java 8将List <Map <String,String>转换为Map <String,Map <String,String >>

-4 java java-stream

我想转换地图列表即

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

到地图的地图即

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

在地图列表中我将Distanace存储在两个城市之间.我的地图列表是:

[{Destination = IOWA,distance = 2000,Source = NY},{Destination = OHIO,distance = 3000,Source = NY},{Destination = TX,distance = 2500,Source = NY},{Destination = NC,distance = 1500,Source = TX},{Destination = NY,distance = 2500,Source = TX},{Destination = DEL,distance = 3000,Source = TX}]

现在我必须把它转换成

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

这样我们就可以远离所有城市.Outer Map Key将成为Source City.值映射将具有目标城市作为键和源到目标之间的距离作为值.输出格式为:

{TX = {NC = 1500,DEL = 3000,NY = 2500},NY = {IOWA = 2000,TX = 2500,OHIO = 3000}}

我想通过使用Java 8 Stream API进行转换.不知道如何使用groupingby.

shm*_*sel 5

正如其他人所指出的那样,您没有使用理想的数据结构.但在这种情况下,这应该做你想要的:

Map<String, Map<String, String>> distancesBySource = distances.stream()
        .collect(Collectors.groupingBy(m -> m.get("Source"),
                Collectors.toMap(m -> m.get("Destination"), m -> m.get("distance"))));
Run Code Online (Sandbox Code Playgroud)