递归 处理数据的累加

继上一篇文章

最低层的数据往上层累加 ,计算总数

private List<Map<String, Object>> setTreeData(String officeId, List<Office> officeList, List<String> ids, List<Map<String, Object>> all) {
        List<Map<String, Object>> list = new ArrayList<>();
        if (!CollectionUtils.isEmpty(officeList)) {
            for (Office office : officeList) {
                Map<String, Object> map = new HashMap<>();
                map.put("id", office.getId());
                map.put("title", office.getName());
				//查询数据量
				 List<User> sList = groupMachine(schoolId, camBusiness.getId());
                Integer total = doHandleMachine(sList, status, date, silentType);
                map.put("num", total);
                String parentId = "";
                List<Office> parents = officeDao.findByParentId(officeId, office.getId());
                if (CollectionUtils.isNotEmpty(parents)) {//判断当前节点是否有子节点
                    List list1 = setTreeData(officeId, parents, ids, all);
                      map.put("children", list1);
                       parentId = camBusiness.getId();
                } else {
                    ids.add(office.getId());
                    map.put("children", new ArrayList<>());
                }
                list.add(map);
				//统计数量 //最上层数据赋值
                for (Map<String, Object> objectMap : list) {
                    if (StringUtils.isNotBlank(parentId) && parentId.equals(objectMap.get("id"))) {
                        List<Map<String, Object>> mapList = (List<Map<String, Object>>) objectMap.get("children");
                        int sum = 0;
                        for (Map<String, Object> stringObjectMap : mapList) {
                            Integer num = (Integer) stringObjectMap.get("num");
                            sum += num;
                        }
                        map.put("num", sum);
                    }
                }
            }
        }
        return list;
    }

最低层的数据往上层累加 ,每一层包含的集合,相同数据合并

1.先把每层的数据集合赋值给该有的节点上

2.每一层进行累加

 private List<Map<String, Object>> setOderTreeTopData(List<Map<String, Object>> allTree) {
        if (!CollectionUtils.isEmpty(allTree)) {

            for (Map<String, Object> objectMap : allTree) {
                String parentId = "";
                Boolean flag = false;
                List<Map<String, Object>> mapList = (List<Map<String, Object>>) objectMap.get("children");
                if (CollectionUtils.isNotEmpty(mapList)) {
                    parentId = (String) objectMap.get("id");
                    List<Company> todayNewList = new ArrayList<>();
                    for (Map<String, Object> map : mapList) {
                        if (map.get("userList") == null) {
                            map.put("userList", new ArrayList<Company>());
                        } else {
                            List<Company> list = (List<Company>) map.get("userList");
                            for (Company vo : list) {
                                Company vo = new Company();
                                vo.setTitle(vo.getTitle());
                                vo.setOrderNum(vo.getOrderNum());
                                vo.setLastOrderNum(vo.getLastOrderNum());
                                vo.setRate(vo.getRate());
                                vo.setFlag(vo.getFlag());
                                todayNewList.add(vo);
                            }
                        }
                    }
                    objectMap.put("userList", merge(todayNewList));

                    setOderTreeTopData(mapList); //递归
                }
				//处理最上层的数据
                if (StringUtils.isNotBlank(parentId) && parentId.equals(objectMap.get("id"))) {
                    List<Map<String, Object>> mapList2 = (List<Map<String, Object>>) objectMap.get("children");
                    List<Company> userList = new ArrayList<>();
                    for (Map<String, Object> stringObjectMap : mapList2) {
                        List<Company> list = (List<Company>) stringObjectMap.get("userList");
                        for (Company vo : list) {
                            if (vo.getFlag() != null && vo.getFlag()) {
                                flag = true;
                            }
                            Company vo = new Company();
                            vo.setTitle(vo.getTitle());
                            vo.setOrderNum(vo.getOrderNum());
                            vo.setLastOrderNum(vo.getLastOrderNum());
                            vo.setRate(vo.getRate());
                            vo.setFlag(vo.getFlag());
                            userList.add(vo);
                        }

                    }
                    objectMap.put("flag", flag);
                    objectMap.put("userList", merge(userList));//处理重复的数据 计算

                }
            }
        }
        return allTree;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值