繁体   English   中英

创建带有地图列表的合并地图

[英]Create a merged map with list of maps

我是 Java 新手,所以寻求专家的帮助。 任何帮助将不胜感激,并为我提供学习新事物的空间。

我想从另一个地图列表(列表)创建地图列表(结果列表),其中单个地图(键)包含作为地图列表键的值(地图1,地图2,地图3......等等)。 像下面的例子

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
}

现在,我希望第一张地图(键)的值作为第二张地图(map1)和第三张地图(map2)等值的每个新地图(合并地图)的键。

所需的输出应该像

{ Cow : Legs, Eagle : Wings }
{ Cow : Grass, Eagle : Flesh }
//more

循环遍历每个映射,对于每个映射,遍历keys映射中的值并将其查找到当前映射中并将结果插入到mergedMap 在处理的地图的端部,添加mergedMapresultList

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之前检查键是否存在(以避免添加值)。

使用流的另一种方法。

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在创建地图之前检查该值是否存在于地图中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM