最近遇到一个需求,就是把多个Map合并成一个Map,这个map的key是所有map的并集,value是相同key对应的value组成的List,下面我用画图简单说明一下
我们要把右侧三个map合并成下方红框的一个大的map,当没有并集中的key时候用0替代位置,代码也粘贴到下方,思路是先构造一个key并集的大Map,然后在对每个
小map进行判断处理,如果小map中key不在大Map中的就用0放到大map的List中,具体代码见下方,有任何问题请留言交流
package chap1;
import java.util.*;
import java.util.stream.Collectors;
public class MapDiffUtil {
public static void main(String[] args) {
/*
*List<Map<String, Object>> 转Map<Object, Object>
*/
List<Map<String, Object>> dataList = new ArrayList<Map<String, Object>>();
Map<String, Object> map1 = new HashMap<String, Object>();
map1.put("1000", "value0");
dataList.add(map1);
Map<String, Object> map2 = new HashMap<String, Object>();
map2.put("1001", "value1");
dataList.add(map2);
Map<String, Object> map3 = new HashMap<String, Object>();
map3.put("1002", "value2");
dataList.add(map3);
// 遍历所有集合
Map<Object, Object> resultMap = new HashMap<Object, Object>();
//处理key
for (Map<String, Object> map : dataList) {
Set set = map.keySet();
Iterator it = set.iterator();
while (it.hasNext()) {
Object key = it.next();
Object value = map.get(key);
//System.out.println(key+"--"+value);
if (!resultMap.containsKey(key)) {
// 不存在Key
List<Object> mapList = new ArrayList<Object>();
resultMap.put(key, mapList);
}
}
}
//处理数据
for (Map<String, Object> map : dataList) {
Set set = resultMap.keySet();
Iterator it = set.iterator();
while (it.hasNext()) {
Object key = it.next();
if (map.containsKey(key)) {
// 存在Key
List<Object> mapList = (List) resultMap.get(key);
mapList.add(map.get(key));
}else{
List<Object> mapList = (List) resultMap.get(key);
mapList.add("=");
}
}
}
System.out.println(resultMap);
}
public static Map<Object, Object> injectMap(List<Map> dataList) {
// 遍历所有集合
Map<Object, Object> resultMap = new HashMap<Object, Object>();
//处理key
for (Map<String, Object> map : dataList) {
Set set = map.keySet();
Iterator it = set.iterator();
while (it.hasNext()) {
Object key = it.next();
Object value = map.get(key);
//System.out.println(key+"--"+value);
if (!resultMap.containsKey(key)) {
// 不存在Key
List<Object> mapList = new ArrayList<Object>();
resultMap.put(key, mapList);
}
}
}
//处理数据
for (Map<String, Object> map : dataList) {
Set set = resultMap.keySet();
Iterator it = set.iterator();
while (it.hasNext()) {
Object key = it.next();
if (map.containsKey(key)) {
// 存在Key
List<Object> mapList = (List) resultMap.get(key);
mapList.add(map.get(key));
}else{
List<Object> mapList = (List) resultMap.get(key);
mapList.add("=");
}
}
}
System.out.println(resultMap);
return resultMap;
}
}