1、通过java的map来实现
List<Student> list = new ArrayList<>();
list.add(new Student(1, "张三", 10));
list.add(new Student(2, "李四", 20));
list.add(new Student(1, "张三", 30));
Map<Integer, Student> map = new HashMap<>();
for (Student student : list) {
Integer id = student.getId();
if (map.containsKey(id)) {
Student s = map.get(id);
s.setAge(s.getAge() + student.getAge());
map.put(id, s);
} else {
map.put(id, student);
}
}
List<Student> studentList = new ArrayList<>();
for(Integer temp:map.keySet()){
studentList.add(map.get(temp));
}
System.out.println(studentList);
结果:[StreamTest.Student(id=1, name=张三, age=40), StreamTest.Student(id=2, name=李四, age=20)]
2、通过java8来实现
List<Student> list = new ArrayList<>();
list.add(new Student(1, "张三", 10));
list.add(new Student(2, "李四", 20));
list.add(new Student(1, "张三", 30));
List<Student> studentList = new ArrayList<>();
list.parallelStream().collect(Collectors.groupingBy(Student::getId,
Collectors.toList())).forEach((id, transfer) ->
{
transfer.stream().reduce((a, b) ->
new Student(a.getId(), a.getName(), a.getAge() +
b.getAge())).ifPresent(studentList::add);
});
System.out.println(studentList);
结果:[StreamTest.Student(id=1, name=张三, age=40), StreamTest.Student(id=2, name=李四, age=20)]
原文链接:https://blog.csdn.net/qq_36850813/article/details/106117908