实例如下:
//调用函数之前输出:
name=小红 days=3
name=小红 days=4
name=小明 days=6
name=小军 days=8
//调用函数之后输出:
name=小红 days=7
name=小明 days=6
name=小军 days=8
List<Person> personnewList = new ArrayList<Person>();
Person person1 = new Person();
Person person2 = new Person();
Person person3 = new Person();
Person person4 = new Person();
person1.setName("小红");
person1.setDays(3);
person2.setName("小红");
person2.setDays(4);
person3.setName("小明");
person3.setDays(6);
person4.setName("小军");
person4.setDays(8);
personList.add(person1);
personList.add(person2);
personList.add(person3);
personList.add(person4);
personnewList = getNewList(personList);
public static List<Person> getNewList(List<Person> oldList) {
HashMap<String, Person> tempMap = new HashMap<String, Person>();
// 去掉重复的key
for (Person person : oldList) {
String name = person.getName();
// containsKey(Object key)该方法判断Map集合中是否包含指定的键名,如果包含返回true,不包含返回false
// containsValue(Object
// value)该方法判断Map集合中是否包含指定的键值,如果包含返回true,不包含返回false
if (tempMap.containsKey(name)) {
Person newPerson = new Person();
newPerson.setName(name);
// 合并相同key的value
newPerson.setDays(tempMap.get(name).getDays() + person.getDays());
// HashMap不允许key重复,当有key重复时,前面key对应的value值会被覆盖
tempMap.put(name, newPerson);
} else {
tempMap.put(name, person);
}
}
List<Person> newList = new ArrayList<Person>();
Iterator iter = tempMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry entry = (Map.Entry) iter.next();
Person newPerson = (Person)entry.getValue();
newList.add(newPerson);
}
return newList;
}