使用地图列表创建合并地图
Create a merged map with list of maps
我是 java 的新手,所以向专家寻求帮助。任何帮助将不胜感激,并为我提供学习新事物的空间。
我想从另一个地图列表(列表)创建一个地图列表(结果列表),其中单个地图(键)包含作为地图列表(map1、map2、map3 .. 。 很快)。像下面的例子
Map<String, String> keys = new HashMap<>();
keys.put("Animal","Cow");
keys.put("Bird","Eagle");
Map<String, String> map1 =new HashMap<>();
map1.put("Cow","Legs");
m1.put("Eagle","Wings");
Map<String, String> map2 = new HasMap<>();
map2.put("Cow","Grass");
map2.put("Eagle","Flesh");
List<Map<String, String>> list= new ArrayList<>();
list.add(map1);
list.add(map2); // there could be more
List<Map<String, String>> resultList= new ArrayList<>();
for(Map<String, String> eachMap: listOfMaps){
Map<String, String> mergedMap = new HasMap<>();
//help me here
}
现在我想要第一个地图(keys)的值作为每个新地图(mergedMap)的键,第二个地图(map1)和第三个地图(map2)的值等等。
所需的输出应该像
{ Cow : Legs, Eagle : Wings }
{ Cow : Grass, Eagle : Flesh }
//more
遍历每个地图,对于每个地图,循环遍历 keys
地图中的值并在当前地图中查找并将结果插入 mergedMap
。在处理地图结束时,将 mergedMap
添加到 resultList
.
for(Map<String, String> eachMap: list){
Map<String, String> mergedMap = new HashMap<>();
for (String val: keys.values()) {
mergedMap.put(val, eachMap.get(val));
}
resultList.add(mergedMap);
}
System.out.println(resultList);
这假设 keys
地图中的值将始终存在于每个地图中。如果不是,则必须在添加到 mergedMap
之前检查密钥是否存在(以避免添加 null 值)。
另一种使用流的方法。
Collection<String> vals = keys.values();
resultList = list.stream()
.map(eachMap -> vals.stream()
.filter(eachMap::containsKey)
.collect(Collectors.toMap(Function.identity(), eachMap::get)))
.collect(Collectors.toList());
System.out.println(resultList);
注意:filter
在创建地图之前检查该值是否存在于地图中。
我是 java 的新手,所以向专家寻求帮助。任何帮助将不胜感激,并为我提供学习新事物的空间。
我想从另一个地图列表(列表)创建一个地图列表(结果列表),其中单个地图(键)包含作为地图列表(map1、map2、map3 .. 。 很快)。像下面的例子
Map<String, String> keys = new HashMap<>();
keys.put("Animal","Cow");
keys.put("Bird","Eagle");
Map<String, String> map1 =new HashMap<>();
map1.put("Cow","Legs");
m1.put("Eagle","Wings");
Map<String, String> map2 = new HasMap<>();
map2.put("Cow","Grass");
map2.put("Eagle","Flesh");
List<Map<String, String>> list= new ArrayList<>();
list.add(map1);
list.add(map2); // there could be more
List<Map<String, String>> resultList= new ArrayList<>();
for(Map<String, String> eachMap: listOfMaps){
Map<String, String> mergedMap = new HasMap<>();
//help me here
}
现在我想要第一个地图(keys)的值作为每个新地图(mergedMap)的键,第二个地图(map1)和第三个地图(map2)的值等等。
所需的输出应该像
{ Cow : Legs, Eagle : Wings }
{ Cow : Grass, Eagle : Flesh }
//more
遍历每个地图,对于每个地图,循环遍历 keys
地图中的值并在当前地图中查找并将结果插入 mergedMap
。在处理地图结束时,将 mergedMap
添加到 resultList
.
for(Map<String, String> eachMap: list){
Map<String, String> mergedMap = new HashMap<>();
for (String val: keys.values()) {
mergedMap.put(val, eachMap.get(val));
}
resultList.add(mergedMap);
}
System.out.println(resultList);
这假设 keys
地图中的值将始终存在于每个地图中。如果不是,则必须在添加到 mergedMap
之前检查密钥是否存在(以避免添加 null 值)。
另一种使用流的方法。
Collection<String> vals = keys.values();
resultList = list.stream()
.map(eachMap -> vals.stream()
.filter(eachMap::containsKey)
.collect(Collectors.toMap(Function.identity(), eachMap::get)))
.collect(Collectors.toList());
System.out.println(resultList);
注意:filter
在创建地图之前检查该值是否存在于地图中。