List聚合

需求:数据库查出一批集合,时间各不相同,但是现在要求对同一天的金额和总数再次叠加处理:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class ResultDO {
    private String times;
    private Double price;
    private Long count;
}

public class DataTest {

    public static void main(String[] args) {
        ResultDO do1 = new ResultDO();
        ResultDO do2 = new ResultDO();
        ResultDO do3 = new ResultDO();
        ResultDO do4 = new ResultDO();

        do1.setPrice(20.1);
        do2.setPrice(21.1);
        do3.setPrice(22.1);
        do4.setPrice(26.1);

        do1.setCount(2L);
        do2.setCount(2L);
        do3.setCount(3L);
        do4.setCount(4L);

        do1.setTimes("2021-04-06");
        do2.setTimes("2021-04-06");
        do3.setTimes("2021-04-07");
        do4.setTimes("2021-04-08");
        List<ResultDO> resultDOS = Arrays.asList(do1,do2,do3,do4);
        List<ResultDO> resultDOList = new ArrayList<>();
        resultDOS.parallelStream().collect(Collectors.groupingBy(o->(o.getTimes()),Collectors.toList()))
                .forEach((id,trans)->{
            trans.stream().reduce((a,b)->new ResultDO(a.getTimes(),a.getPrice()+b.getPrice(),a.getCount()+b.getCount())).ifPresent(resultDOList::add);
        });
        System.out.println(resultDOList);

    }


}

[ResultDO(times=2021-04-06, price=41.2, count=4), ResultDO(times=2021-04-08, price=26.1, count=4), ResultDO(times=2021-04-07, price=22.1, count=3)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值