代码:
package com.example;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author XuYangWei
* @Description:
* @Date 2021/4/22 14:19
*/
public class Java8groupBy {
public static void main(String[] args) {
Map<String, Object> map1=new HashMap();
map1.put("code","ZXC");
map1.put("name","张三");
Map<String, Object> map2=new HashMap();
map2.put("code","ZXC");
map2.put("ce","测试呀");
Map <String, Object>map3=new HashMap();
map3.put("code","WW");
map3.put("name","王五");
List<Map<String, Object>> list=new ArrayList();
list.add(map1);
list.add(map2);
list.add(map3);
List<Map<String, Object>> m2=merge(list,"code");
System.out.println("m2的数据格式是:"+m2);
}
public static List<Map<String, Object>> merge(List<Map<String, Object>> m1, String mergeKey){
Set<String> set = new HashSet<>();
System.out.println("m1的数据格式是:"+m1);
return m1.stream()
.filter(map->map.get(mergeKey)!=null)
.collect(Collectors.groupingBy(o->{
//暂存所有key
set.addAll(o.keySet());
//按mergeKey分组
return o.get(mergeKey).toString();
}))
.entrySet().stream().map(o->{
//合并
Map<String, Object> map = o.getValue().stream().flatMap(m->{
return m.entrySet().stream();
}).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (a,b)->b));
//为没有的key赋值空字符串
set.stream().forEach(k->{
if(!map.containsKey(k)) map.put(k, "");
});
return map;
}).collect(Collectors.toList());
}
}
打印结果: