为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

白猪掌柜的 2019-03-01 10:53:43
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(),这样好像是不行的,当初好像有一个什么办法的,我暂时想不到了,哪位大神帮我回忆回忆呵??
查看完整描述

7 回答

?
九州编程

TA贡献1785条经验 获得超4个赞

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

查看完整回答
反对 回复 2019-03-01
?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

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

查看完整回答
反对 回复 2019-03-01
?
慕的地10843

TA贡献1785条经验 获得超8个赞

希望直接跳出两层循环,无非是两种办法:

  1. break label的语法(这个我从没用过,可以Google一下);

  2. 就是你用的办法,设个标志位。

另外,city的复数是cities而不是citys

查看完整回答
反对 回复 2019-03-01
?
动漫人物

TA贡献1815条经验 获得超10个赞

这写得啰嗦了。我的话先这样写:

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;
}

你的原代码有几个需要优化的地方:

  1. 尽量避免双重循环,内循环一般都应该提取出来;

  2. 对同一个变量的操作,代码行尽可能集中在一起,这样阅读起来更自然;

  3. 变量命名应当表现其业务含义和主要类型,比如 List 对象尽量都用 xxxList 方式命名。这我懒得给你改了。

查看完整回答
反对 回复 2019-03-01
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

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

查看完整回答
反对 回复 2019-03-01
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

提问前先组织好自己的思路,你想问的是什么?你希望得到什么回答?不然其他人帮不了你回答。

查看完整回答
反对 回复 2019-03-01
  • 7 回答
  • 0 关注
  • 1033 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信