double average = students.stream().mapToDouble(Student::getScore).average().orElse(0D);
时间: 2024-08-12 21:07:23 浏览: 117
Jdk8都7岁了,你还在用for循环遍历list吗?3分钟学习一下Stream吧
这段Java代码使用了Java 8的Stream API来计算学生列表中成绩(假设为double类型)的平均值。`students` 是一个`Student`对象的集合,每个`Student`有一个名为`getScore()`的方法来获取其分数。
这里是逐步解释:
1. `students.stream()`:创建一个从`students`集合流化的操作。这允许我们对集合中的每个元素执行连续的操作。
2. `.mapToDouble(Student::getScore)`:将每个`Student`对象转换为其分数(double类型)。`Student::getScore`是一个方法引用,它表示调用`Student`对象的`getScore`方法并返回结果。
3. `.average()`:对所有映射后的分数进行平均计算。
4. `.orElse(0D)`:如果流为空(即没有学生),则返回默认值0.0(double类型)。`orElse()`是一个可选操作,当流中没有元素时提供备选值。
所以,整个表达式的结果就是`students`集合中所有学生的平均成绩,如果集合为空则返回0.0。示例中`average()`会返回一个`OptionalDouble`,但因为后面有`.orElse(0D)`,所以我们可以直接得到一个double类型的值。
阅读全文