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
提交
取消