需求:List集合去除重复名字的Student对象,并且重复名字的Student对象年龄取平均值,其中集合列表如下:
List<Student> list = new ArrayList<>(); list.add(new Student("张三", 20)); list.add(new Student("张三", 23)); list.add(new Student("张三", 22)); list.add(new Student("张三", 24)); list.add(new Student("李四", 2)); list.add(new Student("王二", 24)); list.add(new Student("王二", 23));
// 新建一个集合用来存放去重复求平均之后的对象
List<Student> newList = new ArrayList<>();
HashMap<String,List<Student>> hashMap = new HashMap<>();
//遍历需要去重复的集合,然后添加到map集合
for (Student student : list) {
List<Student> mapList = hashMap.get(student.name);
if (mapList == null){
mapList = new ArrayList<>();
hashMap.put(student.name,mapList);
}
mapList.add(student);
}
Set<String> keySet = hashMap.keySet();
Iterator<String> iterator = keySet.iterator();
// 遍历map集合
while (iterator.hasNext()){
String key = iterator.next();
// 同一名字 重复的条目数量
int count = 0;
// 年龄总和
int total = 0;
List<Student> keyList = hashMap.get(key);
// 遍历map 中的list 给count和total 赋值
for (Student student : keyList) {
count++;
total += student.age;
}
// 创建Student对象
Student student = new Student();
// 给Student赋值name和平均age
student.name = key;
student.age = total /count;
// 添加到新的集合当中
newList.add(student);
}
// 打印日志
System.out.println(newList.toString());
最终打印日志结果:[Student{name='李四', age=2}, Student{name='张三', age=22}, Student{name='王二', age=23}]
最后感谢技术交流群的一位开发者老哥的帮助,谢谢!