使用java8的stream对数组进行求和

这篇博客介绍了如何使用Java的Stream API分别对BigDecimal类型的值和double类型的值进行求和。对于BigDecimal,通过reduce方法结合BigDecimal::add实现精确计算;而对于double,利用Collectors.summingDouble方法可以方便地获取总和。

1.对BigDecimal类型的值求和

  List<Map<String,Object>> list = new ArrayList<>();
  BigDecimal sum = list.stream().map(x -> new BigDecimal(x.get("key").toString())).reduce(BigDecimal.ZERO,BigDecimal::add);

2.对double型的值求和

List<Map<String,Object>> list = new ArrayList<>();
  double sum = list.stream().collect(Collectors.summingDouble(x -> ((Double) x.get("key"))));

### 使用 Java Stream 对 BigDecimal 类型进行求和Java Stream API 中,对 `BigDecimal` 类型进行求和操作时,不能直接使用 `sum()` 方法,因为 `Stream<BigDecimal>` 没有提供 `sum()` 方法。此时需要使用 `reduce()` 方法进行聚合操作,以实现对 `BigDecimal` 的求和。 #### 使用 `reduce` 方法进行 `BigDecimal` 求和 `BigDecimal` 是不可变对象,因此需要通过 `reduce()` 方法显式地执行累加操作。以下是一个对 `List<BigDecimal>` 进行求和的示例: ```java import java.math.BigDecimal; import java.util.Arrays; import java.util.List; public class BigDecimalSumExample { public static void main(String[] args) { List<BigDecimal> numbers = Arrays.asList( new BigDecimal("10.5"), new BigDecimal("20.3"), new BigDecimal("30.2") ); BigDecimal sum = numbers.stream() .reduce(BigDecimal.ZERO, BigDecimal::add); System.out.println("Sum: " + sum); // 输出 Sum: 61.0 } } ``` 在这个示例中,`reduce()` 方法接受一个初始值 `BigDecimal.ZERO` 一个累加函数 `BigDecimal::add`,依次将流中的 `BigDecimal` 元素相加,最终得到总[^1]。 #### 对数组中的 `BigDecimal` 进行求和 如果 `BigDecimal` 数据存储在一个数组中,同样可以通过 `Stream` `reduce()` 方法进行求和: ```java import java.math.BigDecimal; public class BigDecimalArraySumExample { public static void main(String[] args) { BigDecimal[] numbers = { new BigDecimal("100.25"), new BigDecimal("200.75"), new BigDecimal("300.00") }; BigDecimal sum = Arrays.stream(numbers) .reduce(BigDecimal.ZERO, BigDecimal::add); System.out.println("Sum: " + sum); // 输出 Sum: 601.00 } } ``` #### 对 `Map` 中的 `BigDecimal` 进行求和 如果 `BigDecimal` 数据存储在一个 `Map` 的值中,可以通过提取值集合并使用 `Stream` 进行求和: ```java import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; public class BigDecimalMapSumExample { public static void main(String[] args) { Map<String, BigDecimal> priceMap = new HashMap<>(); priceMap.put("Item1", new BigDecimal("10.00")); priceMap.put("Item2", new BigDecimal("20.50")); priceMap.put("Item3", new BigDecimal("30.75")); BigDecimal sum = priceMap.values().stream() .reduce(BigDecimal.ZERO, BigDecimal::add); System.out.println("Sum: " + sum); // 输出 Sum: 61.25 } } ``` #### 注意事项 - `BigDecimal` 是不可变对象,因此每次加法操作都会返回一个新的实例,不能使用可变累加器。 - 在处理 `BigDecimal` 求和时,必须确保流中没有 `null` 值,否则会抛出 `NullPointerException`。 - 使用 `reduce()` 方法时,初始值应设置为 `BigDecimal.ZERO`,以确保计算的正确性。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值