java的stream工具里,reduce(Collectors.summingDouble)方法怎么用?假设 我提供了一个List<Student>集合,需要对student的score属性进行求和
时间: 2023-05-23 18:06:37 浏览: 115
A:
首先,需要导入Java的Stream类和Collectors类:
```java
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
```
然后,假设提供了一个List<Student>集合,需要对student的score属性进行求和,可以使用如下代码:
```java
List<Student> students = ...; // 假设已经提供了List<Student>集合
double sum = students.stream()
.mapToDouble(Student::getScore) // 将每个student对象的score属性转换为double值
.reduce(0, Double::sum); // 对所有double值求和
System.out.println("总分数为:" + sum);
```
解释一下上面的代码:
1. 使用`stream()`方法将List<Student>集合转换为Stream<Student>对象。
2. 使用`mapToDouble()`方法将每个Student对象的score属性转换为double值。
3. 使用`reduce()`方法对所有double值进行求和,初始值为0,累加器函数为`Double::sum`。
如果使用Java 8以后的版本,可以使用`Collectors.summingDouble()`方法来简化求和操作,如下所示:
```java
double sum = students.stream()
.collect(Collectors.summingDouble(Student::getScore)); // 对score属性求和
System.out.println("总分数为:" + sum);
```
可以看到,`reduce(Collectors.summingDouble)`方法可以在Stream中对元素进行聚合操作,从而避免了显示迭代操作。当涉及到比较复杂的聚合操作时,使用Stream链式编程可以使代码更加简洁,同时能够利用多核处理器的优势。
阅读全文