List<BigDecimal> 进行相加 计算平均分 用stream流
时间: 2024-10-11 14:18:10 浏览: 6
`List<BigDecimal>` 中的元素表示一个包含大额浮点数的列表,如果需要通过 Stream 流计算它们的总和并得到平均值,可以按照以下步骤操作:
1. 首先,使用 Java 8 的 `Stream` API 将列表转换为流(Stream):
```java
List<BigDecimal> numberList = ...; // 假设这是一个已填充的大数值列表
Stream<BigDecimal> stream = numberList.stream();
```
2. 然后,使用 `map` 函数将每个元素映射到它们的值(这里不需要改变值,直接返回即可):
```java
Stream<BigDecimal> summedStream = stream.map(BigDecimal::doubleValue);
```
3. 接着,调用 `reduce` 函数计算所有值的总和,注意此处转换为 double 类型是因为 BigDecimal 直接相加可能会有精度损失:
```java
BigDecimal sum = summedStream.reduce(BigDecimal.ZERO, BigDecimal::add);
```
4. 最后,计算平均值,除以元素的数量(假设列表非空):
```java
int count = numberList.size();
BigDecimal average = sum.divide(BigDecimal.valueOf(count), RoundingMode.HALF_UP);
```
`RoundingMode.HALF_UP` 表示四舍五入保留小数部分。
完整的示例代码:
```java
List<BigDecimal> numberList = ...;
BigDecimal sum = numberList.stream()
.mapToDouble(BigDecimal::doubleValue)
.reduce(BigDecimal.ZERO, BigDecimal::add);
int count = numberList.size();
BigDecimal average = (count > 0) ? sum.divide(BigDecimal.valueOf(count), RoundingMode.HALF_UP) : null;
// 输出结果
System.out.println("Sum: " + sum);
System.out.println("Average: " + average);
```