使用 reduce(BigDecimal::add) 报null 错误
时间: 2024-03-08 17:48:19 浏览: 181
使用 reduce(BigDecimal::add) 报 null 错误可能是因为你的集合中有 null 元素。这样的话,reduce 会抛出空指针异常。你可以在 reduce 前过滤掉 null 元素,或者将 null 元素转换为 BigDecimal.ZERO。例如:
```
List<BigDecimal> list = Arrays.asList(BigDecimal.ONE, BigDecimal.TEN, BigDecimal.ZERO, null);
BigDecimal sum = list.stream()
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
System.out.println(sum); // 输出11
```
在上述代码中,我们使用 filter 方法来过滤掉 null 元素,然后使用 reduce 方法将所有元素相加,初始值为 BigDecimal.ZERO。这样就能够避免空指针异常了。
相关问题
.reduce(BigDecimal.ZERO, BigDecimal::add);
这段代码`reduce(BigDecimal.ZERO, BigDecimal::add)`是用于对一个`BigDecimal`类型的流进行归约操作,其中`BigDecimal.ZERO`表示初始值,`BigDecimal::add`表示累加操作的方法引用。具体地说,它将流中的每个元素都与初始值进行累加操作,然后返回最终的累加结果。这种操作对于求和运算非常常见。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [java 8 lamdba 表达式list集合的BigDecimal求和操作](https://blog.csdn.net/u010741112/article/details/112615713)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
reduce(BigDecimal.ZERO, BigDecimal::add)空指针
根据引用[1]和引用[3]的内容,问题是关于使用reduce方法时出现空指针异常的。根据引用[1]中的描述,BigDecimal.ZERO的scale为0,而上游传过来的totalAmount为0.00,类型为BigDecimal。根据引用[3]中的描述,之前的逻辑只判断了totalAmount是否为空,而上游传过来的totalAmount为空时传的是0.00。因此,可能是在reduce方法中出现了空指针异常,因为BigDecimal.ZERO和totalAmount的scale不一致。为了解决这个问题,可以在reduce方法之前先判断totalAmount是否为null,如果为null,则将其赋值为BigDecimal.ZERO,并且设置scale为2,以保持一致。这样就可以避免空指针异常的发生。