Java HashMap 如何分组
问题描述
我们有一个学生列表,每个学生有姓名和班级两个属性。现在我们希望根据班级将学生分组,并统计每个班级的人数。我们可以通过使用Java的HashMap来解决这个问题。
解决方案
首先,我们需要定义一个学生类,包含姓名和班级属性。然后,我们可以创建一个HashMap来存储班级和学生列表的映射关系。对于每个学生,我们将其添加到对应班级的学生列表中。
public class Student {
private String name;
private String className;
public Student(String name, String className) {
this.name = name;
this.className = className;
}
public String getName() {
return name;
}
public String getClassName() {
return className;
}
}
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class GroupingExample {
public static void main(String[] args) {
// 创建学生列表
List<Student> students = new ArrayList<>();
students.add(new Student("Alice", "ClassA"));
students.add(new Student("Bob", "ClassB"));
students.add(new Student("Charlie", "ClassA"));
students.add(new Student("David", "ClassB"));
students.add(new Student("Eve", "ClassA"));
// 创建HashMap来存储班级和学生列表的映射关系
Map<String, List<Student>> groups = new HashMap<>();
// 遍历学生列表,将学生分组
for (Student student : students) {
String className = student.getClassName();
if (!groups.containsKey(className)) {
groups.put(className, new ArrayList<>());
}
groups.get(className).add(student);
}
// 输出每个班级的学生人数
for (Map.Entry<String, List<Student>> entry : groups.entrySet()) {
String className = entry.getKey();
List<Student> studentList = entry.getValue();
System.out.println(className + ": " + studentList.size());
}
}
}
上面的代码中,我们通过遍历学生列表,将每个学生按照班级分组并存储到HashMap中。我们使用班级名称作为键,对应的学生列表作为值。如果班级不存在,我们先创建一个新的空列表,并将其放入HashMap中。然后,我们将当前学生添加到对应班级的学生列表中。最后,我们遍历HashMap,输出每个班级的学生人数。
结果展示
班级 | 人数 |
---|---|
ClassA | 3 |
ClassB | 2 |
pie
title 班级人数
"ClassA": 60.0
"ClassB": 40.0
如上表所示,我们成功地将学生分组,并统计了每个班级的人数。通过饼状图,我们可以清晰地看到每个班级的人数占比情况。
总结
通过使用Java的HashMap,我们可以轻松地将对象按照某个属性分组,并进行统计。这对于解决类似的问题非常有用。本文通过一个具体的例子,演示了如何使用HashMap分组学生,并统计每个班级的人数。希望本文能对你有所帮助。