情景描述
在一个list中存放有许多个Person对象,对象属性分别为key与value,现需将对象中key相同的多个value值合并为一个。
//实体类
Class Person{
private Integer key;
private Integer value;
//书写get、set方法
public Integer getKey(){
return key;
}
public void setKey(Integer key){
this.key = key;
}
public Integer getValue(){
return value;
}
public void setValue(){
this.value = value;
}
}
//方法调用
Class UsePerson{
public static void main(String []args){
List<Person> personList = new ArrayList<Person>();
Person p1 = new Person();
//为Integer类型可直接输入数字
p1.setKey(1);
p1.setValue(2);
Person p2 = new Person();
p2.setKey(2);
p2.setValue(1);
Person p3 = new Person();
p3.setKey(1);
p3.setValue(3);
Person p4 = new Person();
p4.setKey(2);
p4.setValue(4);
personList.add(p1);
personList.add(p2);
personList.add(p3);
personList.add(p4);
//去除重复key,并且合并value
List<Person> newPersonList = getNewList(personList);
//输出去除重复的key,并输出value
for(Person person : newPersonList){
System.out.prinln("key:"+ person.getKey());
System.out.prinln("value:"+ person.getValue());
}
}
}
实现重点内容:去除重复key,并且合并value
public List<Person> getNewList(List<Person> oldList){
HashMap<Integer,Person> tempMap = new HashMap<Integer,Person>();
//去掉重复的key
for(Person person : oldList){
int temp = person.getKey();
//containsKey(Object key)该方法判断Map集合中是否包含指定的键名,如果包含返回true,不包含返回false
//containsValue(Object value)该方法判断Map集合中是否包含指定的键值,如果包含返回true,不包含返回false
if(tempMap.containsKey(temp)){
Person newPerson = new Person();
newPerson.setKey(temp);
//合并相同key的value
newPerson.setValue(tempMap.get(temp).getValue() + person.getValue());
//HashMap不允许key重复,当有key重复时,前面key对应的value值会被覆盖
tempMap.put(temp,newPerson );
}else{
tempMap.put(temp,person );
}
}
//去除重复key的list
List<Person> newList = new ArrayList<Person>();
for(Integer temp:tempMap.keySet()){
newList.add(tempMap.get(temp));
}
return newList;
}