You need to enable JavaScript to run this app. 使用Java stream计算Arrays.asList中Student对象两个成绩的平均值
优惠活动
大模型
产品
解决方案
定价
更多

使用Java stream计算Arrays.asList中Student对象两个成绩的平均值

问题解答

错误原因

你原有代码运行结果异常的核心问题有两个:

  • 误用了运算符:student.getSpecialSubjectGrade() & student.getCommonSubjectGrade() 中的&是Java的位与运算符,不是你需要的求和运算符+,运算结果不是两个成绩的总和
  • 业务逻辑不匹配:你需要计算的是单个学生的两个成绩的平均值,而原有代码是将位与运算得到的单个数值再求平均值,逻辑完全不符。

正确实现方案

Java Stream完全可以实现该需求,正确代码如下:

double averageGradeOfTheCertainStudent = students.stream()
        // 筛选指定姓名的学生
        .filter(student -> "Petyr Baelish".equals(student.getName()))
        // 直接计算当前学生双科成绩的平均值
        .mapToDouble(student -> (student.getCommonSubjectGrade() + student.getSpecialSubjectGrade()) / 2.0)
        // 获取结果取值,此处如果学生不存在时抛出异常提示,避免空指针问题
        .findFirst()
        .orElseThrow(() -> new RuntimeException("未找到匹配的学生信息"));
System.out.println("Average grade of Petyr Baelish = " + averageGradeOfTheCertainStudent);

运行后会得到正确结果6.5。

如果你需要批量计算所有学生各自的双科平均成绩,可使用以下写法:

students.stream().forEach(student -> {
    double avg = (student.getCommonSubjectGrade() + student.getSpecialSubjectGrade()) / 2.0;
    System.out.println(student.getName() + "的双科平均成绩为:" + avg);
});

内容的提问来源于stack exchange,提问作者Shubt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 21:54:05