java使用stream流把集合中元素的属性空值赋值为0,BigDecimal类型属性使用reduce()自定义运算符,避免计算的时候导致报错

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 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) 方法进行逻辑运算

你可能感兴趣的:(Java基础,Lambda和Stream流,java)