list分组求和的实现

前言

在开发过程中,我们经常会遇到需要对一个列表进行分组求和的需求。例如,我们有一个学生成绩列表,我们希望按照班级对学生成绩进行分组,并计算每个班级的总分。本文将介绍如何使用Java实现这个功能。

问题描述

假设我们有一个学生成绩列表,其中每个学生的信息包括班级和分数。我们希望按照班级对学生成绩进行分组,并计算每个班级的总分。

解决方案

我们可以使用Java的集合框架中的Map来实现分组求和的功能。具体步骤如下:

  1. 创建一个Map对象,用于存储班级和对应的总分。
  2. 遍历学生成绩列表,对于每个学生的班级和分数,我们需要进行以下操作:
    • 如果该班级已经存在于Map中,我们将该学生的分数加到该班级的总分上。
    • 如果该班级不存在于Map中,我们将该班级作为键,该学生的分数作为值,添加到Map中。
  3. 遍历Map中的键值对,输出每个班级的总分。

下面是使用Java代码实现上述解决方案的示例:

import java.util.*;

public class GroupSum {
    public static void main(String[] args) {
        // 创建学生成绩列表
        List<Student> studentList = new ArrayList<>();
        studentList.add(new Student("ClassA", 80));
        studentList.add(new Student("ClassB", 90));
        studentList.add(new Student("ClassA", 85));
        studentList.add(new Student("ClassB", 95));
        studentList.add(new Student("ClassC", 70));

        // 创建Map对象,用于存储班级和对应的总分
        Map<String, Integer> groupSum = new HashMap<>();

        // 遍历学生成绩列表
        for (Student student : studentList) {
            // 如果该班级已经存在于Map中,将学生的分数加到总分上
            if (groupSum.containsKey(student.getClassName())) {
                int sum = groupSum.get(student.getClassName());
                groupSum.put(student.getClassName(), sum + student.getScore());
            } else {
                // 如果该班级不存在于Map中,将班级和分数添加到Map中
                groupSum.put(student.getClassName(), student.getScore());
            }
        }

        // 输出每个班级的总分
        for (Map.Entry<String, Integer> entry : groupSum.entrySet()) {
            System.out.println("班级:" + entry.getKey() + ",总分:" + entry.getValue());
        }
    }
}

class Student {
    private String className;
    private int score;

    public Student(String className, int score) {
        this.className = className;
        this.score = score;
    }

    public String getClassName() {
        return className;
    }

    public int getScore() {
        return score;
    }
}

运行上述代码,输出结果如下:

班级:ClassA,总分:165
班级:ClassB,总分:185
班级:ClassC,总分:70

类图

下面是本文示例代码所使用的类的类图:

classDiagram
class GroupSum{
  <<public>> +main(String[] args)
}
class Student{
  -String className
  -int score
  <<constructor>> +Student(String className, int score)
  +getClassName(): String
  +getScore(): int
}
GroupSum --> Student

结论

通过上述示例代码,我们实现了对学生成绩列表按照班级进行分组求和的功能。这个方法可以应用于其他类似的情况,只需要根据实际需求修改代码即可。

总结一下,我们使用Java的Map来实现分组求和的功能,步骤包括创建Map对象,遍历列表,并对每个元素进行相应的操作。希望本文对你理解list分组求和的实现有所帮助。

参考资料

  • [Java Map documentation](