通过使用相同名称的键连接列表来组合多个Map <String,List>结构

use*_*101 8 java dictionary java-8

最干净的方法是什么?

我有

Map<String, List<String>> map1 = ...;  
Map<String, List<String>> map2 = ...; 
Map<String, List<String>> map3 = ...;
Run Code Online (Sandbox Code Playgroud)

地图都具有完全相同的键,没有重复的值.我想为每个键将map2和map3的列表附加到map1列表的末尾.

这就是我目前正在尝试这样做的方式:

Map<String, List<String>> conversions = new HashMap<String, List<String>>();
List<String> histList = new ArrayList<String>();

for(String key : map1.keySet()){
    histList.addAll(map1.get(key));
    histList.addAll(map2.get(key));
    histList.addAll(map3.get(key));
    conversions.put(key,histList);
}
Run Code Online (Sandbox Code Playgroud)

dus*_*sch 7

如果您不想创建临时列表,可以直接添加到列表一,而不是替换它.

for (String key: map1.keySet()) { //iterate over all the keys
    map1.get(key).addAll(map2.get(key)); //add all the values in map 2 to map 1
    map1.get(key).addAll(map3.get(key)); //add all the values in map 3 to map 1
}
Run Code Online (Sandbox Code Playgroud)

  • 迭代键以执行地图查找(在同一地图上)是不必要的资源浪费,您甚至执行查找*两次*.你可以简单地遍历`entrySet()`来获得key,key和value,而不需要map查找.你可以使用`map1.forEach((key,value) - > {value.addAll(map2.get(key)); value.addAll(map3.get(key));});来更简洁. (6认同)