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 回答
慕的地10843
TA贡献1785条经验 获得超8个赞
希望直接跳出两层循环,无非是两种办法:
用
break label
的语法(这个我从没用过,可以Google一下);就是你用的办法,设个标志位。
另外,city
的复数是cities
而不是citys
。
动漫人物
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;
}
你的原代码有几个需要优化的地方:
尽量避免双重循环,内循环一般都应该提取出来;
对同一个变量的操作,代码行尽可能集中在一起,这样阅读起来更自然;
变量命名应当表现其业务含义和主要类型,比如 List 对象尽量都用 xxxList 方式命名。这我懒得给你改了。
添加回答
举报
0/150
提交
取消