java基础操作2——java设计问题:避免嵌套循环,如果存在多层循环请考虑设计是否合理

在实际项目开发过程中,循环操作可以说是最基本的处理数据的方式之一。但是对于初学者或者设计不合理的业务就会产生嵌套循环甚至多层深度循环,先不讨论执行效率如何,首先得想想业务这样实现真的合理吗?

其实循环操作无非就是处理数据结构,通过equals比较去设置对应属性或者做动态计算,因此可以考虑尽量转换成map结构去做相应处理。

1.例如存在如下两个数据集,需要动态合并计算月数据和当前数据;
//查询月统计数据
List<CheckupInputInfo> defaultCheckList=checkupInputInfoMapper.getCheckupInputList(params);
//查询截止目前的统计数据
List<CheckupInputInfo> currentCheckList=checkupInputInfoMapper.getCurrentDataList(params);
        
2.将对应的list转成map数据结构,具体案例请看如下:
//动态数据转换
Map<String,CheckupInputInfo> defaultCheckMap
                = defaultCheckList.stream().collect(Collectors.toMap(CheckupInputInfo::getStationName, Function.identity()));
Map<String,CheckupInputInfo> currentCheckMap
                = currentCheckList.stream().collect(Collectors.toMap(CheckupInputInfo::getStationName, Function.identity()));
//因为需要动态补全缺失的审查数据,不能直接使用map作为循环变量
List<String> staNameList = staList.stream().map(SysDept::getStaName).collect(Collectors.toList());
3.最后只需要一次遍历循环,避免了多层循环和判断,即可动态获取不同结构的数据,使用map最大的好处就是效率高,速度快。
        //最终需要的数据结果
        List<CheckupInputInfo> gatherCheckUpList = new ArrayList<>();
        CheckupInputInfo singleCheckup = null;
        for (String staStr : staNameList) {
            singleCheckup = new CheckupInputInfo();
            if(defaultCheckMap.containsKey(staStr)){
                singleCheckup = defaultCheckMap.get(staStr);
                singleCheckup.setCurrentSum(currentCheckMap.get(staStr).getCountNum());
            }else {
                singleCheckup.setStationName(staStr);
                singleCheckup.setCheckupNum(sysDeptMap.get(staStr).getStaCheckupNum());
                if(currentCheckMap.containsKey(staStr)){
                    singleCheckup.setCurrentSum(currentCheckMap.get(staStr).getCountNum());
                }else {
                    singleCheckup.setCurrentSum(0);
                }
                singleCheckup.setCountNum(0);
                singleCheckup.setRatio(BigDecimal.ZERO);
            }
            gatherCheckUpList.add(singleCheckup);
        }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值