猿问

java for循环的时候增加循环体的长度是不是不太好的?

   for(CityDataVO cityItem: citys){
        boolean flag =false;
        for(ProvinceDataVO proItem : list){
            xxxxxx
            flag = true;
            break;
        }
        if(!flag){
            ProvinceDataVO province = new ProvinceDataVO();
            province.setProvinceId(cityItem.getProvinceId());
            province.setProvinceName(cityItem.getProvinceName());
            province.setReportNum(cityItem.getCount());
            List<CityDataVO> vo = new ArrayList<>();
            vo.add(cityItem);
            province.setCityData(vo);
            list.add(province);
        }
    }
    

比如上面的代码,如果我没有进入第二层的for循环里,我就会对list进行一个add的操作。这里应该是没有问题的,因为我在第一个for循环体里操作的是第二个for循环的size()。我记得有一个情景是for(){...}我直接在...操作了for的size(),这样好像是不行的,当初好像有一个什么办法的,我暂时想不到了,哪位大神帮我回忆回忆呵??

白猪掌柜的
浏览 1034回答 7
7回答

九州编程

不要用 for(:){},用 for(int i = 0; i < list.size(); i++),小心不要搞成死循环

慕盖茨4494581

不能在foreach里操作list(add,remove等操作)

慕的地10843

希望直接跳出两层循环,无非是两种办法: 用break label的语法(这个我从没用过,可以Google一下); 就是你用的办法,设个标志位。 另外,city的复数是cities而不是citys。

动漫人物

这写得啰嗦了。我的话先这样写: for (CityDataVO cityItem: citys){ if (validateCityItem(cityItem, list)) { continue; } List<CityDataVO> vo = new ArrayList<>(); vo.add(cityItem); ProvinceDataVO province = new ProvinceDataVO(); province.setProvinceId(cityItem.getProvinceId()); province.setProvinceName(cityItem.getProvinceName()); province.setReportNum(cityItem.getCount()); province.setCityData(vo); list.add(province); } ... private boolean validateCityItem(CityDataVO cityItem, List<ProvinceDataVO> list) { for(ProvinceDataVO proItem : list){ if (...) { return true; } } return false; } 你的原代码有几个需要优化的地方: 尽量避免双重循环,内循环一般都应该提取出来; 对同一个变量的操作,代码行尽可能集中在一起,这样阅读起来更自然; 变量命名应当表现其业务含义和主要类型,比如 List 对象尽量都用 xxxList 方式命名。这我懒得给你改了。

婷婷同学_

不明白你到底问什么..是if进不去吗?

回首忆惘然

提问前先组织好自己的思路,你想问的是什么?你希望得到什么回答?不然其他人帮不了你回答。
随时随地看视频慕课网APP

相关分类

Java
我要回答