以下是一个示例Java代码,用于按列分组并找到平均值:
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class GroupByAndAverage {
public static void main(String[] args) {
// 创建示例数据
List students = new ArrayList<>();
students.add(new Student("John", "Math", 90));
students.add(new Student("John", "Science", 95));
students.add(new Student("Jane", "Math", 85));
students.add(new Student("Jane", "Science", 92));
students.add(new Student("Bob", "Math", 80));
students.add(new Student("Bob", "Science", 88));
// 按列分组并计算平均值
Map averageScoresBySubject = new HashMap<>();
Map countsBySubject = new HashMap<>();
for (Student student : students) {
String subject = student.getSubject();
double score = student.getScore();
if (averageScoresBySubject.containsKey(subject)) {
averageScoresBySubject.put(subject, averageScoresBySubject.get(subject) + score);
countsBySubject.put(subject, countsBySubject.get(subject) + 1);
} else {
averageScoresBySubject.put(subject, score);
countsBySubject.put(subject, 1);
}
}
for (String subject : averageScoresBySubject.keySet()) {
double averageScore = averageScoresBySubject.get(subject) / countsBySubject.get(subject);
System.out.println("Subject: " + subject + ", Average Score: " + averageScore);
}
}
static class Student {
private String name;
private String subject;
private double score;
public Student(String name, String subject, double score) {
this.name = name;
this.subject = subject;
this.score = score;
}
public String getName() {
return name;
}
public String getSubject() {
return subject;
}
public double getScore() {
return score;
}
}
}
在此示例中,我们创建了一个名为Student
的内部类来表示学生对象。每个学生对象都有姓名、科目和分数。
然后,我们创建了一个List
来存储学生对象,并将示例数据添加到该列表中。
接下来,我们使用两个Map
来分别存储每个科目的分数总和和学生人数。我们迭代学生列表,并根据科目进行分组。如果averageScoresBySubject
和countsBySubject
中已经存在该科目,则将分数和计数相应地增加;否则,将新的科目、分数和计数添加到这两个Map
中。
最后,我们遍历averageScoresBySubject
,计算每个科目的平均分数,并打印输出结果。
这是一个简单的示例,你可以根据自己的需求进行修改和扩展。