两个list合并,并根据某个字段进行数据合并
方法一:sql返回对象为对象时
List<StatisticsVo> list = zmrManicureRecordsMapper.rankingBeauticianPlus(params);
List<StatisticsVo> list1 = zmrManicureRecordsMapper.rankingBeauticianAmount(params);
list.addAll(list1);
List<StatisticsVo> lists = new ArrayList<>(list.stream().collect(
Collectors.toMap(StatisticsVo::getZmrUserId, a -> a, (o1, o2) -> {
if (o1.getZmrUserId().equals(o2.getZmrUserId())) {
o1.setAmountSum(o2.getAmountSum());
}
return o1;
})
).values());
方法一:sql返回为List<Map<String,Object>>
Map<String,Object> one = new HashMap<>();
one.put("id","001");
one.put("name","曹操");
one.put("sex","mail");
Map<String,Object> one2 = new HashMap<>();
one2.put("id","002");
one2.put("name","孙权");
one2.put("sex","mail");
Map<String,Object> one3 = new HashMap<>();
one3.put("id","003");
one3.put("name","刘备");
one3.put("sex","mail");
List<Map<String,Object>> listA = new ArrayList<>();
listA.add(one);
listA.add(one2);
listA.add(one3);
Map<String,Object> two = new HashMap<>();
two.put("id","001");
two.put("age",30);
Map<String,Object> two2 = new HashMap<>();
two2.put("id","002");
two2.put("age",31);
Map<String,Object> two3 = new HashMap<>();
two3.put("id","003");
two3.put("age",32);
List<Map<String,Object>> listB = new ArrayList<>();
listB.add(two);
listB.add(two2);
listB.add(two3);
listB.addAll(listA);
List<Map<String,Object>> result = listB.stream()
.collect(Collectors.groupingBy(group -> group.get("id").toString()))
.entrySet()
.stream()
.map(map -> {
Map<String,Object> collect = map.getValue().stream()
.flatMap(o -> o.entrySet().stream())
.collect(Collectors.toMap(Map.Entry::getKey,Map.Entry::getValue,(m1,m2) -> m2));
return collect;
})
.collect(Collectors.toList());
System.out.println(result);