如何用Java Stream计算学科平均总分并找出最容易的学科
解决方法
核心逻辑
- 按学科维度,累加所有学生在该学科的平均分,得到每个学科的总分
- 遍历所有学科的总分,找出数值最高的那个学科
完善后的Java代码实现
import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; public class SubjectScoreAnalyzer { public static String findEasiestSubject(List<Map<String, Double>> studentSubjectAverages) { // 存储各学科的平均分总和 Map<String, Double> subjectTotalMap = new HashMap<>(); // 遍历每个学生的学科平均分,累加对应学科的总分 for (Map<String, Double> studentScores : studentSubjectAverages) { for (Entry<String, Double> scoreEntry : studentScores.entrySet()) { String subject = scoreEntry.getKey(); double avgScore = scoreEntry.getValue(); // 存在则累加,不存在则初始化为当前值 subjectTotalMap.put(subject, subjectTotalMap.getOrDefault(subject, 0.0) + avgScore); } } // 筛选出总分最高的学科 String easiestSubject = null; double highestTotal = Double.MIN_VALUE; for (Entry<String, Double> totalEntry : subjectTotalMap.entrySet()) { if (totalEntry.getValue() > highestTotal) { highestTotal = totalEntry.getValue(); easiestSubject = totalEntry.getKey(); } } return easiestSubject; } // 测试示例 public static void main(String[] args) { // 模拟3名学生的各学科平均分数据 List<Map<String, Double>> studentData = List.of( Map.of("Math", 1.33, "History", 2.66, "Physics", 1.33), Map.of("Math", 1.33, "History", 2.66, "Physics", 1.33), Map.of("Math", 1.33, "History", 2.67, "Physics", 1.33) ); // 输出结果应为 History System.out.println(findEasiestSubject(studentData)); } }
关键细节说明
- 使用
HashMap的getOrDefault方法,简化累加逻辑,避免空指针判断 - 初始化最高总分时用
Double.MIN_VALUE,确保能正确匹配所有可能的正数值 - 测试数据的累加结果完全符合题目示例:Math和Physics总和为3.99,History总和为7.99,最终返回
History
内容的提问来源于stack exchange,提问作者Kto Tam
相关产品推荐
相关产品推荐

