double average = students.stream().mapToInt(Student::getGrade).average().orElse(0);
时间: 2025-05-17 18:24:23 浏览: 17
### Java Stream API 计算学生等级平均值
在 Java 中,可以利用 `Stream` API 来高效处理集合数据。通过使用 `mapToInt()` 方法将对象映射到其对应的整数值,并结合 `orElse()` 处理可能的异常情况来计算学生的平均成绩。
以下是实现该功能的一个完整代码示例:
```java
import java.util.Arrays;
import java.util.List;
import java.util.OptionalDouble;
public class AverageGradeCalculator {
public static void main(String[] args) {
List<Student> students = Arrays.asList(
new Student(85),
new Student(90),
new Student(78),
new Student(92)
);
double averageGrade = calculateAverageGrade(students);
System.out.println("The average grade is: " + averageGrade);
}
public static double calculateAverageGrade(List<Student> students) {
OptionalDouble averageOptional = students.stream()
.filter(student -> student.getGrade() != null) // 过滤掉无效的成绩
.mapToInt(Student::getGrade) // 将学生成绩转换为 int 流
.average(); // 计算平均值
return averageOptional.orElse(0.0); // 如果流为空,则返回默认值 0.0 [^1]
}
}
class Student {
private Integer grade;
public Student(Integer grade) {
this.grade = grade;
}
public Integer getGrade() {
return grade;
}
}
```
#### 解析
上述代码实现了以下逻辑:
- 创建了一个包含多个 `Student` 对象的列表。
- 使用 `stream()` 方法将列表转化为流。
- 调用了 `filter()` 方法过滤掉任何无效或空的成绩记录。
- 利用 `mapToInt()` 方法提取每个学生的成绩并将其作为原始类型的 `int` 值传递给下游操作。
- 调用 `average()` 方法尝试获取平均值,此方法会返回一个 `OptionalDouble` 类型的结果。
- 若存在有效成绩则返回实际平均分;如果没有任何有效的成绩输入,则调用 `orElse(0.0)` 返回零作为默认值[^1]。
这种做法不仅简洁明了而且充分利用了现代 Java 的特性,在面对大数据量时也能保持良好的性能表现。
阅读全文
相关推荐



















