**
如何将一个对象集合按照指定的标志(例如ID)进行合并去重的问题**@yl
最近遇到这样一个需求,后台接口从数据库中查询出一组对象的集合,然后需要将这组数据按照它们的id进行去重,并且需要把id相同的对象的某一个字段数据做加法。这里举个例子:
pojo类:
private class Employee{
private int id;//编号
private String name;//姓名
private double inCome;//收入
/*
get()/set()方法
*/
}
下面是实现方法:
public class Test{
public static void main(String args[]){
//首先新建一些数据
Employee e1 = new Employee();
e1.setId(1001);
e1.setName("张三");
e1.setInCome(3000.0);
Employee e2 = new Employee();
e2.setId(1002);
e2.setName("李四");
e2.setInCome(5000.0);
Employee e3 = new Employee();
e3.setId(1003);
e3.setName("王五");
e3.setInCome(8000.0);
}
Employee e4 = new Employee();
e4.setId(1001);
e4.setName("张三");
e4.setInCome(4000.0);
}
Employee e5 = new Employee();
e5.setId(1002);
e5.setName("李四");
e5.setInCome(2000.0);
List<Employee> list = new ArrayList<Employy>();
list.add(e1);
list.add(e2);
list.add(e3);
list.add(e4);
list.add(e5);
//接下来对这个集合去重
List<Employee> theList = getNewList(list);
private static List<Employee> getNewList(List<Employee> list){
HashMap<Integer,Employee> map = new HashMap<Integer,Employee>();
for(Employee emp : list){
int temp = emp.getId();
if(map.containsKey(temp)){
Employee e = new Employee();
e.setId(temp);
e.setName(emp.getName());
e.setInCome(emp.getInCome() + map.get(temp).getInCome())
} else {
map.put(temp,emp);
}
}
//去除重复编号id的list
List<Employee> newList = new ArrayList<Employee>();
for(Integer temp : map.keySet()){
newList.add(map.get(temp));
}
return newList;
}
}
}