美文网首页
循环一块代码和循环一个将代码快封装的方法执行速度谁快

循环一块代码和循环一个将代码快封装的方法执行速度谁快

作者: 尘埃里的玄 | 来源:发表于2021-07-27 14:13 被阅读0次

代码:

public List<AreaToGrossVo> manage(Integer year, Integer month) {
        //找出特性为7的出水表
        List<MeterToNetworkVo> meterAndNetwork = commonDAO.getMeterAndNetwork();
        //获取所有的区域
        List<Integer> areaIds = meterAndNetwork.stream().map(MeterToNetworkVo::getArea_ID).distinct().collect(Collectors.toList());
        List<AreaToGrossVo> areaToGrossVos = new ArrayList<>();
        DecimalFormat df = new DecimalFormat("#0.00");
        for (Integer areaId : areaIds) {
//            AreaToGrossVo areaToGross = getAreaUseStyleData(areaId, year, month);
            //获取教学类型的水表列表
            List<Integer> teachMeters = meterAndNetwork.stream().filter(x -> "1".equals(x.getTexingValue()) && x.getArea_ID().equals(areaId)).map(MeterToNetworkVo::getMeter_ID).collect(Collectors.toList());
            //获取公共类型的水表列表
            List<Integer> commonMeters = meterAndNetwork.stream().filter(x -> "2".equals(x.getTexingValue()) && x.getArea_ID().equals(areaId)).map(MeterToNetworkVo::getMeter_ID).collect(Collectors.toList());
            //获取生活类型的水表列表
            List<Integer> lifeMeters = meterAndNetwork.stream().filter(x -> "2".equals(x.getTexingValue()) && x.getArea_ID().equals(areaId)).map(MeterToNetworkVo::getMeter_ID).collect(Collectors.toList());
            //获取商业类型的水表列表
            List<Integer> businessMeters = meterAndNetwork.stream().filter(x -> "4".equals(x.getTexingValue()) && x.getArea_ID().equals(areaId)).map(MeterToNetworkVo::getMeter_ID).collect(Collectors.toList());

            AreaToGrossVo areaToGross = new AreaToGrossVo();
            areaToGross.setAreaID(areaId);
//            LambdaQueryWrapper<Area> areaLambdaQueryWrapper = new LambdaQueryWrapper<Area>().eq(Area::getAreaID,areaId);
            Area area = areaDAO.selectById(areaId);
//            Area area = areaDAO.selectOne(areaLambdaQueryWrapper);
            areaToGross.setAreaName(area.getAreaName());
            if (teachMeters.isEmpty()) {
                areaToGross.setTeachValue("0.0");
            } else {
                Double allTeachMeterSum = commonDAO.getGrossByArea(year, month, teachMeters);
                areaToGross.setTeachValue(df.format(allTeachMeterSum));
            }

            if (commonMeters.isEmpty()) {
                areaToGross.setCommonValue("0.0");
            } else {
                Double allCommonMeterSum = commonDAO.getGrossByArea(year, month, teachMeters);
                areaToGross.setCommonValue(df.format(allCommonMeterSum));
            }

            if (lifeMeters.isEmpty()) {
                areaToGross.setLifeValue("0.0");
            } else {
                Double allLifeMeterSum = commonDAO.getGrossByArea(year, month, teachMeters);
                areaToGross.setLifeValue(df.format(allLifeMeterSum));
            }

            if (businessMeters.isEmpty()) {
                areaToGross.setBusinessValue("0.0");
            } else {
                Double allBusinessMeterSum = commonDAO.getGrossByArea(year, month, teachMeters);
                areaToGross.setBusinessValue(df.format(allBusinessMeterSum));
            }
            areaToGrossVos.add(areaToGross);
        }
        return areaToGrossVos;
    }

第二种改为方法体

public AreaToGrossVo getAreaUseStyleData(Integer areaId, Integer year, Integer month) {
        //找出特性为7的出水表
        List<MeterToNetworkVo> meterAndNetwork = commonDAO.getMeterAndNetwork();
        DecimalFormat df = new DecimalFormat("#0.00");
        //获取教学类型的水表列表
        List<Integer> teachMeters = meterAndNetwork.stream().filter(x -> "1".equals(x.getTexingValue()) && x.getArea_ID().equals(areaId)).map(MeterToNetworkVo::getMeter_ID).collect(Collectors.toList());
        //获取公共类型的水表列表
        List<Integer> commonMeters = meterAndNetwork.stream().filter(x -> "2".equals(x.getTexingValue()) && x.getArea_ID().equals(areaId)).map(MeterToNetworkVo::getMeter_ID).collect(Collectors.toList());
        //获取生活类型的水表列表
        List<Integer> lifeMeters = meterAndNetwork.stream().filter(x -> "2".equals(x.getTexingValue()) && x.getArea_ID().equals(areaId)).map(MeterToNetworkVo::getMeter_ID).collect(Collectors.toList());
        //获取商业类型的水表列表
        List<Integer> businessMeters = meterAndNetwork.stream().filter(x -> "4".equals(x.getTexingValue()) && x.getArea_ID().equals(areaId)).map(MeterToNetworkVo::getMeter_ID).collect(Collectors.toList());

        AreaToGrossVo areaToGross = new AreaToGrossVo();
        areaToGross.setAreaID(areaId);
        Area area = areaDAO.selectById(areaId);
        areaToGross.setAreaName(area.getAreaName());
        if (teachMeters.isEmpty()) {
            areaToGross.setTeachValue("0.0");
        } else {
            Double allTeachMeterSum = commonDAO.getGrossByArea(year, month, teachMeters);
            areaToGross.setTeachValue(df.format(allTeachMeterSum));
        }

        if (commonMeters.isEmpty()) {
            areaToGross.setCommonValue("0.0");
        } else {
            Double allCommonMeterSum = commonDAO.getGrossByArea(year, month, teachMeters);
            areaToGross.setCommonValue(df.format(allCommonMeterSum));
        }

        if (lifeMeters.isEmpty()) {
            areaToGross.setLifeValue("0.0");
        } else {
            Double allLifeMeterSum = commonDAO.getGrossByArea(year, month, teachMeters);
            areaToGross.setLifeValue(df.format(allLifeMeterSum));
        }

        if (businessMeters.isEmpty()) {
            areaToGross.setBusinessValue("0.0");
        } else {
            Double allBusinessMeterSum = commonDAO.getGrossByArea(year, month, teachMeters);
            areaToGross.setBusinessValue(df.format(allBusinessMeterSum));
        }
        return areaToGross;
    }

    /**
     * 查询一段时间的用水数据(最小单位为月)
     *
     * @param startYear  起始时间段年
     * @param startMonth 起始时间段月
     * @param endYear    终止时间段年
     * @param endMonth   终止时间段月
     * @return
     */
    public List<AreaToGrossVo> manageByRangeTime(Integer startYear, Integer startMonth, Integer endYear, Integer endMonth) {
        //找出特性为7的出水表
        List<MeterToNetworkVo> meterAndNetwork = commonDAO.getMeterAndNetwork();
        //获取所有的区域
        List<Integer> areaIds = meterAndNetwork.stream().map(MeterToNetworkVo::getArea_ID).distinct().collect(Collectors.toList());
        List<AreaToGrossVo> areaToGrossVos = new ArrayList<>();
        DecimalFormat df = new DecimalFormat("#0.00");
        Integer startDate = startYear * 100 + startMonth;
        Integer endDate = endYear * 100 + endMonth;
        for (Integer areaId : areaIds) {
            //获取教学类型的水表列表
            List<Integer> teachMeters = meterAndNetwork.stream().filter(x -> "1".equals(x.getTexingValue()) && x.getArea_ID().equals(areaId)).map(MeterToNetworkVo::getMeter_ID).collect(Collectors.toList());
            //获取公共类型的水表列表
            List<Integer> commonMeters = meterAndNetwork.stream().filter(x -> "2".equals(x.getTexingValue()) && x.getArea_ID().equals(areaId)).map(MeterToNetworkVo::getMeter_ID).collect(Collectors.toList());
            //获取生活类型的水表列表
            List<Integer> lifeMeters = meterAndNetwork.stream().filter(x -> "2".equals(x.getTexingValue()) && x.getArea_ID().equals(areaId)).map(MeterToNetworkVo::getMeter_ID).collect(Collectors.toList());
            //获取商业类型的水表列表
            List<Integer> businessMeters = meterAndNetwork.stream().filter(x -> "4".equals(x.getTexingValue()) && x.getArea_ID().equals(areaId)).map(MeterToNetworkVo::getMeter_ID).collect(Collectors.toList());

            AreaToGrossVo areaToGross = new AreaToGrossVo();
            areaToGross.setAreaID(areaId);
//            LambdaQueryWrapper<Area> areaLambdaQueryWrapper = new LambdaQueryWrapper<Area>().eq(Area::getAreaID,areaId);
            Area area = areaDAO.selectById(areaId);
//            Area area = areaDAO.selectOne(areaLambdaQueryWrapper);
            areaToGross.setAreaName(area.getAreaName());
            if (teachMeters.isEmpty()) {
                areaToGross.setTeachValue("0.0");
            } else {
                Double allTeachMeterSum = commonDAO.getGrossByAreaAndRangeTime(startDate, endDate, teachMeters);
                areaToGross.setTeachValue(df.format(allTeachMeterSum));
            }

            if (commonMeters.isEmpty()) {
                areaToGross.setCommonValue("0.0");
            } else {
                Double allCommonMeterSum = commonDAO.getGrossByArea(startDate, endDate, teachMeters);
                areaToGross.setCommonValue(df.format(allCommonMeterSum));
            }

            if (lifeMeters.isEmpty()) {
                areaToGross.setLifeValue("0.0");
            } else {
                Double allLifeMeterSum = commonDAO.getGrossByArea(startDate, endDate, teachMeters);
                areaToGross.setLifeValue(df.format(allLifeMeterSum));
            }

            if (businessMeters.isEmpty()) {
                areaToGross.setBusinessValue("0.0");
            } else {
                Double allBusinessMeterSum = commonDAO.getGrossByArea(startDate, endDate, teachMeters);
                areaToGross.setBusinessValue(df.format(allBusinessMeterSum));
            }
            areaToGrossVos.add(areaToGross);
        }
        return areaToGrossVos;
    }

原来代码改为1行:

AreaToGrossVo areaToGross = getAreaUseStyleData(areaId, year, month);

前者执行速度:


image.png

后者执行速度:


image.png

因此我推断调用方法栈的会更耗时,因为调用一个方法要去查询方法栈耗时,但是这种做法可以减少代码的冗余量,有利有弊

相关文章

  • 循环一块代码和循环一个将代码快封装的方法执行速度谁快

    代码: 第二种改为方法体 原来代码改为1行: 前者执行速度: 后者执行速度: 因此我推断调用方法栈的会更耗时,因为...

  • javaScript for循环

    循环可以将代码执行指定的次数。 不同类型的循环 javaScript支持不同类型的循环: for 循环代码块一定的...

  • python3基础 循环/高级变量

    python中循环有两种方式: for循环和while循环 while循环:让指定的代码重复性的执行(让执行的代码...

  • python循环

    循环的作用在于将一段代码重复执行多次。 while 循环 Python会循环执行 ,直到不满...

  • “老奶奶”的python学习笔记(5)

    知识体系 for循环和while循环 知识点 循环语句的作用:重复、自动地执行代码 for循环 1、代码格式:fo...

  • js遍历循环for/for...in/for...of/forE

    【1】for循环 语句 1 在循环(代码块)开始前执行语句 2 定义运行循环(代码块)的条件语句 3 在循环(代码...

  • while 循环

    while 循环 while 循环会在指定条件为真时循环执行代码块。语法while (条件){需要执行的代码}实例...

  • 循环

    Python中主要的循环有 for循环和while循环 for循环是根据设定的次数重复执行代码 while循环实在...

  • while循环

    只要指定条件为true,循环就可以一直执行代码块 while循环 while循环会在指定条件为真时循环执行代码块。...

  • for循环中++i和i++的区别

    语法 语句 1 在循环(代码块)开始前执行 语句 2 定义运行循环(代码块)的条件 语句 3 在循环(代码块)已被...

网友评论

      本文标题:循环一块代码和循环一个将代码快封装的方法执行速度谁快

      本文链接:https://www.haomeiwen.com/subject/zykomltx.html