这不会那不会 2022-07-28 20:14 采纳率: 59.5%
浏览 25
已结题

for循环如何提高效率

问题遇到的现象和发生背景

for循环如何提高效率

问题相关代码,请勿粘贴截图
 HyBasicsMaterial hyBasicsMaterial = new HyBasicsMaterial();
        //查询物料表里面的包规,得出需要多少张条形码
        Long supplierCodeSum = hyBarCodeTem.getCustomerMaterialSum();
        //获取物料包规
        String customerMaterialCode = hyBarCodeTem.getCustomerMaterialCode();
        hyBasicsMaterial.setCustomerMaterialCode(customerMaterialCode);
        HyBasicsMaterial hyBasicsMaterial1 = hyBasicsMaterialService.selectHyBasicsMaterial(hyBasicsMaterial);
        //包规数量
        String materialSku = hyBasicsMaterial1.getMaterialSku();
        List<HyBarCodeTem> batchList = new ArrayList();
        long num = 0;
        Long valueOf = Long.valueOf(materialSku);
        //如果是整数
        long l = System.currentTimeMillis();
        if (supplierCodeSum % valueOf == 0) {
            num = supplierCodeSum / valueOf;
            for (long i = 0; i < num; i++) {
                HyBarCodeTem saveItem = HyBarCodeTem.builder().build();
                saveItem.setCustomerMaterialCode(hyBarCodeTem.getCustomerMaterialCode());
                saveItem.setCreateTime(DateUtils.getNowDate());
                saveItem.setCustomerMaterialCodeNo(materialSku);
                saveItem.setIsValid("0");
                batchList.add(saveItem);
            }
        } else {
            //如果有零头
            num = supplierCodeSum / valueOf + 1;
            for (long i = 0; i < num; i++) {
                HyBarCodeTem saveItem = HyBarCodeTem.builder().build();
                saveItem.setCustomerMaterialCode(hyBarCodeTem.getCustomerMaterialCode());
                saveItem.setCreateTime(DateUtils.getNowDate());
                saveItem.setIsValid("0");
                if (i == num - 1) {
                    saveItem.setCustomerMaterialCodeNo(String.valueOf(supplierCodeSum % valueOf));
                } else {
                    saveItem.setCustomerMaterialCodeNo(materialSku);
                }
                batchList.add(saveItem);
            }
        }
        List list = new ArrayList<>();
        // batchList 为空不能保存
        this.saveBatch(batchList);
        for (HyBarCodeTem barCodeTem : batchList) {
            Map<Object, Object> map = new HashMap<>();
            Long id = barCodeTem.getId();
            map.put("id", id);
            list.add(map);
        }
        long l1 = System.currentTimeMillis();
        System.out.println("运行时间:"+(l1 - l)+ "ms");

运行结果及报错内容

img

我的解答思路和尝试过的方法

200条大概要10s左右,如果多的话,时间更长,请问有啥提高效率的方法吗

  • 写回答

2条回答 默认 最新

  • 林地宁宁 2022-07-28 20:32
    关注
    1. 先找到时间耗时长的地方,分析其原因,分析其是不是要做网络请求之类
    2. 考虑 for 循环之间有没有依赖关系,可不可以并行化,每个循环之间会不会相互冲突
    3. 如果可以并行化,用 parallelStream 或者用 ThreadPool 把这里并行化处理即可。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月5日
  • 已采纳回答 7月28日
  • 创建了问题 7月28日

悬赏问题

  • ¥15 前后端分离的学习疑问?
  • ¥15 stata实证代码答疑
  • ¥15 MATLAB数据处理插值
  • ¥50 husky+jaco2实现在gazebo与rviz中联合仿真
  • ¥15 dpabi预处理报错:Error using y_ExtractROISignal (line 251)
  • ¥15 在虚拟机中配置flume,无法将slave1节点的文件采集到master节点中
  • ¥15 husky+kinova jaco2 仿真
  • ¥15 zigbee终端设备入网失败
  • ¥15 金融监管系统怎么对7+4机构进行监管的
  • ¥15 硬件IIC从模式的数据发送,中断数据的接收,不能用HAL库(按照时序图)