多个list集合使用stream分组进行重组数据
@Override
public static void main(String[] args) {
List<Map<String,Object>> list1 = new ArrayList<>();
HashMap<String, Object> map11 = new HashMap<>();
map11.put("age",18);
map11.put("name","张三");
map11.put("sex","男");
HashMap<String, Object> map12 = new HashMap<>();
map12.put("age",19);
map12.put("name","李四");
map12.put("sex","男");
list1.add(map11);
list1.add(map12);
List<Map<String,Object>> list2 = new ArrayList<>();
HashMap<String, Object> map21 = new HashMap<>();
map21.put("name","张三");
map21.put("height",178);
HashMap<String, Object> map22 = new HashMap<>();
map22.put("name","李四");
map22.put("height",170);
list2.add(map21);
list2.add(map22);
List<Map<String,Object>> list3 = new ArrayList<>();
HashMap<String, Object> map31 = new HashMap<>();
map31.put("name","张三");
map31.put("money",100);
HashMap<String, Object> map32 = new HashMap<>();
map32.put("name","李四");
map32.put("money",150);
list3.add(map31);
list3.add(map32);
List<Map<String,Object>> resList = new ArrayList<>();
List<Map<String,Object>> resListTemp = new ArrayList<>();
resListTemp.addAll(list1);
resListTemp.addAll(list2);
resListTemp.addAll(list3);
Map<Object, List<Map<String, Object>>> name = resListTemp.stream().collect(Collectors.groupingBy(m -> m.get("name")));
List<List<Map<String, Object>>> values = new ArrayList<>(name.values());
for (List<Map<String, Object>> value : values) {
Map<String, Object> hashMap = new HashMap<>();
for (Map<String, Object> map : value) {
hashMap.put("name",map.get("name"));
if (null != map.get("age")){
hashMap.put("age",map.get("age"));
}
if (null != map.get("sex")){
hashMap.put("sex",map.get("sex"));
}
if (null != map.get("height")){
hashMap.put("height",map.get("height"));
}
if (null != map.get("money")){
hashMap.put("money",map.get("money"));
}
}
resList.add(hashMap);
}
}