jdk8 stream流分组,统计个数

20 篇文章 2 订阅
3 篇文章 0 订阅

前提

原始数据
字段1字段2字段3字段4
ABCD
ABCD
BBCD
BBCD
操作得到的数据

根据字段1分组之后得到数量。如:A的数量为2,B的数量也是2.返回前端数值。

字段1字段2字段3字段4
ABCD
BBCD
// 其中vResNeLists类似与原始数据

//方法一;
        // 根据网元类型id分组和统计行数
        Map<Integer, Map<Integer, Long>> map = vResNeLists.stream()
                .collect(Collectors.groupingBy(VResNeList::getTypeId, Collectors.groupingBy(VResNeList::getTypeId, Collectors.counting())));
       // 存放新的集合里面存在总数量
        List<NeReportVO> newVResNeLists=new ArrayList();
        // 进行处理操作 添加到新的集合里面
        vResNeLists.stream().forEach(vResNeList->{
            NeReportVO neReportVO = new NeReportVO();
            map.forEach((k, v) -> {
                if (k == vResNeList.getTypeId()) {
                    neReportVO.setTotal(Math.toIntExact(v.get(k)));
                }
                neReportVO.setName(vResNeList.getName());
                neReportVO.setNeModel(vResNeList.getTypeName());
                neReportVO.setNeType(vResNeList.getTypeCategoryName());
            });
            newVResNeLists.add(neReportVO);
        });
        //按照网元类型id进行去重操作
        ArrayList<NeReportVO> collect = newVResNeLists.stream().collect(
                Collectors.collectingAndThen(Collectors.toCollection(() ->
                        new TreeSet<>(Comparator.comparing(NeReportVO::getNeModel))), ArrayList::new));
        return collect;

        //方法二;
        //按照网元类型去重
        List<VResNeList> vResNeListList = vResNeLists.stream().collect(
                Collectors.collectingAndThen(Collectors.toCollection(() ->
                        new TreeSet<>(Comparator.comparing(VResNeList::getTypeId))), ArrayList::new));


        for (VResNeList vResNeList : vResNeListList) {

            //获取网元类型对应的网元集合数据
            List<VResNeList> corpList = vResNeLists.stream().filter(item ->
                    item.getTypeId().equals(vResNeList.getTypeId())
            ).collect(Collectors.toList());

            //按照型号去重
            List<VResNeList> typeLists = corpList.stream().collect(
                    Collectors.collectingAndThen(Collectors.toCollection(() ->
                            new TreeSet<>(Comparator.comparing(VResNeList::getTypeId))), ArrayList::new));

            for (VResNeList neList : typeLists) {

                //获取对应厂家对应型号的数据总集合
                List<VResNeList> typeList = corpList.stream().filter(item ->
                        item.getTypeId().equals(neList.getTypeId())).collect(Collectors.toList());

                //网元返回对象
                NeReportVO neReportVO = new NeReportVO();
                neReportVO.setName(vResNeList.getName());
                neReportVO.setNeModel(neList.getTypeName());
                neReportVO.setNeType(neList.getTypeCategoryName());
                neReportVO.setTotal(typeList.size());

                neReportVOS.add(neReportVO);

            }

        }
        return neReportVOS;
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值