jdk8 list Stream groupingBy 分组之后 利用 reducing 求和 BigDecimal

1,建一个测试实体类

package com.xiaoli.security.service;


import lombok.Data;

import java.math.BigDecimal;

@Data
public class TestStreamEnttiry {

    private String groupCode;

    private String groupName;

    private BigDecimal amt;

}

2,写测试代码进行测试

package com.xiaoli.security.service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class TestStream {

    public static void main(String[] args) {
        List<TestStreamEnttiry> dfsfs= new ArrayList<>();
        TestStreamEnttiry testStreamEnttiry = new TestStreamEnttiry();
        TestStreamEnttiry testStreamEnttiry1 = new TestStreamEnttiry();
        TestStreamEnttiry testStreamEnttiry2 = new TestStreamEnttiry();
        TestStreamEnttiry testStreamEnttiry3 = new TestStreamEnttiry();
        TestStreamEnttiry testStreamEnttiry4 = new TestStreamEnttiry();
        testStreamEnttiry.setGroupCode("OCR01");
        testStreamEnttiry.setAmt(new BigDecimal("0.2"));

        testStreamEnttiry1.setGroupCode("OCR01");
        testStreamEnttiry1.setAmt(new BigDecimal("0.7"));

        testStreamEnttiry2.setGroupCode("OCR02");
        testStreamEnttiry2.setAmt(new BigDecimal("0.6"));

        testStreamEnttiry3.setGroupCode("OCR02");
        testStreamEnttiry3.setAmt(new BigDecimal("0.2"));

        testStreamEnttiry4.setGroupCode("OCR03");
        testStreamEnttiry4.setAmt(null);

        dfsfs.add(testStreamEnttiry);
        dfsfs.add(testStreamEnttiry1);
        dfsfs.add(testStreamEnttiry2);
        dfsfs.add(testStreamEnttiry3);
        dfsfs.add(testStreamEnttiry4);

        Map<String, BigDecimal> collect = dfsfs.parallelStream()
                .collect(Collectors.groupingBy(TestStreamEnttiry::getGroupCode,
                        Collectors.reducing(new BigDecimal("0"),
                                t->{
                                    if (t.getAmt()==null) {
                                        return  new BigDecimal("0");
                                    }
                                    return t.getAmt();
                                }, (v1, v2) -> v1.add(v2))));

        System.out.println(collect);

    }

}

3,运行查看结果

{OCR01=0.9, OCR02=0.8, OCR03=0}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值