多个相同的对象存储在List集合,根据对象内的某一个属性去重并且实现其中一个字段相加
Posted justdoit_potato
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多个相同的对象存储在List集合,根据对象内的某一个属性去重并且实现其中一个字段相加相关的知识,希望对你有一定的参考价值。
原始集合:
[{"name":"jay","age":30},{"name":"jay","age":30},{"name":"jj","age":30}]
期望输出:[{"name":"jay","age":60},{"name":"jj","age":30}]
定义实体类:Singer 属性:name ages
方法一:
/**
* 将id进行合并nums, sums 相加道回合并后的集合使用Java8的流进行处理
*/
public static List<Singer> merge(List<Singer> list) {
Map<String, Singer> map = new HashMap<>();
list.stream()
.forEach(singer-> {
Singer last = map.get(Singer.getName());
if(null != last){
singer.setAges(singer.getAges() + last.getAges());
map.put(singer.getName(), singer);
}else{
map.put(singer.getName(), singer);
}
});
return map.values().stream().collect(Collectors.toList());
}
方法二:java8表达式
/**
* 将name进行合并ages 相加道回合并后的集合使用Java8的流进行处理
*/
public static List<Singer> merge(List<Singer> list) {
List<Singer> result = list.stream()
// 表示name为key, 接着如果有重复的,那么从Singer对象o1与o2中筛选出一个,这里选择o1,
// 并把name重复,需要将ages与o1进行合并的o2, 赋值给o1,最后返回o1
.collect(Collectors.toMap(Singer::getName, a -> a, (o1,o2)-> {
o1.setAges(o1.getAges() + o2.getAges());
return o1;
})).values().stream().collect(Collectors.toList());
return result ;
}
以上是关于多个相同的对象存储在List集合,根据对象内的某一个属性去重并且实现其中一个字段相加的主要内容,如果未能解决你的问题,请参考以下文章
多个相同的对象存储在List集合,根据对象内的某一个属性去重并且实现其中一个字段相加
多个相同的对象存储在List集合,根据对象内的某一个属性去重并且实现其中一个字段相加