此文章发布于22
个月前,部分信息可能已经过时
,请自行斟酌确认。
方法一
/**
* 将id进行合并,sums、nums 属性求和
*/
public static List<BillsNums> merge(List<BillsNums> list) {
Map<String, BillsNums> map = new HashMap<>();
list.stream()
.forEach(billsNums -> {
BillsNums last = map.get(billsNums.getId());
if(null != last){
billsNums.setSums(billsNums.getSums() + last.getSums());
billsNums.setNums(billsNums.getNums() + last.getNums());
map.put(billsNums.getId(), billsNums );
}else{
map.put(billsNums.getId(), billsNums);
}
});
return map.values().stream().collect(Collectors.toList());
}
方法二
/**
* 将id进行合并,sums、nums 属性求和
*/
public static List<BillsNums> merge(List<BillsNums> list) {
// 表示id为key,如果有重复的,那么从对象o1与o2中筛选出一个,这里选择o1,
// 同时将 o1 的 nums 和 sums 与 o2 进行合并赋值到 o1 最后返回 o1
List<BillsNums> result = list.stream()
.collect(Collectors.toMap(BillsNums::getId, a -> a, (o1,o2)-> {
o1.setNums(o1.getNums() + o2.getNums());
o1.setSums(o1.getSums() + o2.getSums());
return o1;
})).values().stream().collect(Collectors.toList());
return result;
}