一次代码优化

这几天接了一个祖传代码,有段代码如下

                for (int i = 0; i < ids.size(); i++) {
                    String actualAmount = "0.00";
                   String planAmount = "0.00";
                   WorkDetailBean bean = new WorkDetailBean();
                    for (int j = 0; j < length; j++) {
                    CheckBean skuListBean = companyBeanList.get(j);
                    if (ids.get(j).equals(skuListBean.getSkuId())) {
                        List infoList = new Gson().fromJson(skuListBean.getCheckInfo(), new TypeToken>() {
                        }.getType());
                        String amount = "0.00";
                        try {//没有限制输入类型 string就崩溃掉了
                            for (int k = 0; k < infoList.size(); k++) {
                                amount = Arith.add(amount, Arith.mul(String.valueOf(infoList.get(k).getNum()), infoList.get(k).getRate()));
                                bean.setUnit(infoList.get(k).getName());
                            }
                        } catch (Exception e) {
                            bean.setUnit("");
                            e.printStackTrace();
                            continue;
                        }
                       bean.setStandardWeight(skuListBean.getStandardWeight());
                        bean.setCheck(skuListBean.getCheck());
                    }

中间赋值代码很多 去除了一部分无用代码。
一开始没发现问题,因为开发和测试环境也都OK 也就没注意,但是版本发出去之后,线上反馈问题卡顿.就排查发现问题在这里

                companyBeanList = MyApplication.mDBMaster.mCheckDBDao.queryDataList(orderId);

这是本地一个订单商品表,切到线上debug一看吓一跳 900多个数据
然后三个900多次的for循环导致卡死,我当时都泪目了。怎么办,改吧。 又不敢乱改,阅读代码发现最外层 只声明了值

    for (int i = 0; i < ids.size(); i++) {
                    String actualAmount = "0.00";
                   String planAmount = "0.00";
                   WorkDetailBean bean = new WorkDetailBean();

最后改动如下:

                for (int j = 0; j < length; j++) {
                    String actualAmount = "0.00";
                    String planAmount = "0.00";
                    WorkDetailBean bean = new WorkDetailBean();
                    CheckBean skuListBean = companyBeanList.get(j);
                    if (actualAmountMap.containsKey(skuListBean.getSkuId())) {
                        actualAmount = String.valueOf(actualAmountMap.get(skuListBean.getSkuId()));
                        planAmount = String.valueOf(planAmountMap.get(skuListBean.getSkuId()));
                    } else {
                        actualAmountMap.put(planAmountMap.get(skuListBean.getSkuId()), "0.00");
                        planAmountMap.put(planAmountMap.get(skuListBean.getSkuId()), "0.00");
                    }

去除了最外层一次循环,问题就解决了,暂时没发现其他问题。
完毕。。。。

你可能感兴趣的:(一次代码优化)