List中去除某些对象某个字段的重复值
问题描述如下:
有一个List list 放了五个对象:user1、user2、user3、user4、user5
User有三个属性Id、name、age
其中user2的记录大概是这样:“100”,"abc",20;
user3的记录大概是这样:“100”,“def”,20;
请问怎么才能只保留user2和user3中的一个对象,并将其中的name合并到新对象中,
新对象如“100”,“abcdef”,20
这只是举个例子,实际中有可能user4和user5与此类似,如果有id相同的两个对象,则对其进行
合并,只保留一个对象,求一个通用的方法,能筛选出对象集合中某些相同ID的两个对象,将其合并
仍保留在原list中
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
publicclassTestDemo1 {
publicstaticvoidmain(String[] args) {
List list =newArrayList<>();
list.add(newUser(1,"a",20));
list.add(newUser(1,"a",20));
list.add(newUser(2,"a",20));
list.add(newUser(3,"b",20));
list.add(newUser(1,"c",20));
list.add(newUser(4,"d",20));
list.add(newUser(2,"e",20));
list.add(newUser(1,"a",20));
list = mySort(list);
for(User user : list) {
System.out.println(user.toString());
}
}
publicstaticList mySort(List list){
HashMap tempMap =newHashMap<>();
for(User user : list) {
intkey = user.getId();
if(tempMap.containsKey(key)){
User tempUser =newUser(key,tempMap.get(key).getName() + user.getName(),tempMap.get(key).getAge());
tempMap.put(key, tempUser);
}else{
tempMap.put(key, user);
}
}
List tempList =newArrayList<>();
for(intkey : tempMap.keySet()){
tempList.add(tempMap.get(key));
}
returntempList;
}
}
classUser{
privateintid;
privateString name;
privateintage;
publicUser(){}
publicUser(intid, String name,intage) {
super();
this.id = id;
this.name = name;
this.age = age;
}
publicintgetId() {
returnid;
}
publicvoidsetId(intid) {
this.id = id;
}
publicString getName() {
returnname;
}
publicvoidsetName(String name) {
this.name = name;
}
publicintgetAge() {
returnage;
}
publicvoidsetAge(intage) {
this.age = age;
}
@Override
publicString toString() {
return"User [id="+ id +", name="+ name +", age="+ age +"]";
}
}
SQL: SELECT
a1.id,
a1. NAME,
GROUP_CONCAT(a2.type),
a1.click,
a1.hits,
a1.add_time,
a1. STATUS
FROM
advertise a1
LEFT JOIN advertise_show_type a2 ON a1.id = a2.advertise_id
WHERE
a1.del = 0 and a2.del = 0
group by id