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

    谢谢

    回复
查看更多回答(1条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 8月4日
  • 已采纳回答 7月28日
  • 创建了问题 7月28日
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部