java的list实现分组求和

本文介绍了如何使用Python并行流API对`DebtCust`对象列表按部门和客户号分组,计算每个组内的债务总和,适用于大数据场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对list的数据按某些属性进行分组,然后对组内某些属性求和,类似sql的group by功能。

例如以下以机构和客户号组合分组,对debt求和,最后形成一个新的list 

 public static void main(String[] args) {
        DebtCust d1 = new DebtCust().setDeptId(1L).setCustCode("1").setDebt(new BigDecimal("5.1"));
        DebtCust d2 = new DebtCust().setDeptId(2L).setCustCode("2").setDebt(new BigDecimal("5.1"));
        DebtCust d3 = new DebtCust().setDeptId(1L).setCustCode("1").setDebt(new BigDecimal("5.0"));
        DebtCust d4 = new DebtCust().setDeptId(3L).setCustCode("1").setDebt(new BigDecimal("5.0"));
        DebtCust d5 = new DebtCust().setDeptId(2L).setCustCode("2").setDebt(new BigDecimal("5.1"));
        List<DebtCust> debtCustList = Arrays.asList(new DebtCust[]{d1, d2, d3, d4, d5});
        List<DebtCust> newList = new ArrayList<>();
        debtCustList.parallelStream().collect(Collectors.groupingBy(d -> d.getDeptId() + d.getCustCode(), Collectors.toList()))
                .forEach((id, groupList) -> {
                    groupList.stream().reduce(
                            (a, b) -> new DebtCust()
                                            .setDeptId(a.getDeptId())
                                            .setCustCode(a.getCustCode())
                                            .setDebt(a.getDebt().add(b.getDebt()))
                    ).ifPresent(newList::add);
                });
        System.out.println(newList);
    }

tips:本方法仅适用大数据量统计(不适用于超大对象,例如list长度100w)

记录下看到的金句:买好的,不如买得好,买得好不如卖得巧。

所谓的价值投资,依然离不开择时,不得不承认择时是困难的,专业的芒格巴菲等智者也有失误的时候,所以,不轻易择时。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值