1、数据准备,示例代码
- PersonDto personDto = new PersonDto();
- personDto.setPrice(NumberUtil.toBigDecimal(10.2));
-
- PersonDto personDto1 = new PersonDto();
- personDto1.setPrice(NumberUtil.toBigDecimal(20.15));
-
- PersonDto personDto2 = new PersonDto();
- personDto2.setPrice(null);
-
- List<PersonDto> personDtos = Lists.newArrayList(personDto, personDto1, personDto2);
- BigDecimal reduce = personDtos.stream()
- //注意这里空值转换为0,需要开启实体或dto类的链式写法 @Accessors(chain = true)
- .map(item -> ObjUtil.isNull(item.getPrice()) ? item.setPrice(BigDecimal.ZERO) : item)
- .map(PersonDto::getPrice)
- .reduce(new BigDecimal(0), BigDecimal::add);
- System.out.println("计算结果:" + reduce);
2、输出
计算结果:30.35
总结:
1、把集合元素中属性的空值赋值为0,需要开启实体类或dto类的 @Accessors(chain = true) 链式写法
2、stream()后面可以连续map绘制,如 stream().map().map().map()
3、BigDecimal类型的属性可以使用 .reduce(new BigDecimal(0), BigDecimal::add) 方法进行逻辑运算