国产成人精品久久免费动漫-国产成人精品天堂-国产成人精品区在线观看-国产成人精品日本-a级毛片无码免费真人-a级毛片毛片免费观看久潮喷

您的位置:首頁技術(shù)文章
文章詳情頁

java for循環(huán)的時候增加循環(huán)體的長度是不是不太好的?

瀏覽:133日期:2023-10-23 17:57:45

問題描述

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

比如上面的代碼,如果我沒有進(jìn)入第二層的for循環(huán)里,我就會對list進(jìn)行一個add的操作。這里應(yīng)該是沒有問題的,因為我在第一個for循環(huán)體里操作的是第二個for循環(huán)的size()。我記得有一個情景是for(){...}我直接在...操作了for的size(),這樣好像是不行的,當(dāng)初好像有一個什么辦法的,我暫時想不到了,哪位大神幫我回憶回憶呵??

問題解答

回答1:

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

回答2:

在for each,也就是你的代碼里 for(a : as)的循環(huán)中,不能對被循環(huán)集合進(jìn)行增加或刪除操作,否則會報ConcurrentModificationException.在這段代碼里是沒有問題的。因為你改變list的操作都是在內(nèi)層循環(huán)之外做的。

看你的需求其實就是按省統(tǒng)計各市的數(shù)據(jù)。有條件使用Java 8的話,可以看看Stream的GroupBy方法。可以大大簡化代碼。

一些不相太干的問題,set方法設(shè)置一個list的方式是不太合適的。

如果是有業(yè)務(wù)邏輯的對象,應(yīng)該對內(nèi)部結(jié)構(gòu)進(jìn)行包裝后以業(yè)務(wù)領(lǐng)域的概念提供接口,而不應(yīng)該直接暴露內(nèi)部的集合。

即便是數(shù)據(jù)傳遞對象,也不應(yīng)該提供集合屬性的set方法。一般而言,私有集合變量的生命周期應(yīng)該由它的父對象管理。外界通過外面包裝對象的add或remove方法操作私有的集合。如果需要提供集合方式的get方法。需要考慮是否要進(jìn)行copy或者使之不可變。

回答3:

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

回答4:

希望直接跳出兩層循環(huán),無非是兩種辦法:

用break label的語法(這個我從沒用過,可以Google一下);

就是你用的辦法,設(shè)個標(biāo)志位。

另外,city的復(fù)數(shù)是cities而不是citys。

回答5:

這寫得啰嗦了。我的話先這樣寫:

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

你的原代碼有幾個需要優(yōu)化的地方:

盡量避免雙重循環(huán),內(nèi)循環(huán)一般都應(yīng)該提取出來;

對同一個變量的操作,代碼行盡可能集中在一起,這樣閱讀起來更自然;

變量命名應(yīng)當(dāng)表現(xiàn)其業(yè)務(wù)含義和主要類型,比如 List 對象盡量都用 xxxList 方式命名。這我懶得給你改了。

回答6:

不明白你到底問什么..是if進(jìn)不去嗎?

回答7:

提問前先組織好自己的思路,你想問的是什么?你希望得到什么回答?不然其他人幫不了你回答。

標(biāo)簽: java
相關(guān)文章:
主站蜘蛛池模板: 欧美一级毛片一级毛片 | 久爱综合 | 美女被靠视频免费网站不需要会员 | 黄色三级网站在线观看 | 分享一个无毒不卡免费国产 | 久草免费在线色站 | 日韩精品999 | 亚洲an日韩专区在线 | 大桥未久在线精品视频在线 | 成年人网站在线观看视频 | 最新亚洲人成网站在线影院 | cekc欧美 | 国产成人免费在线视频 | va欧美| 亚洲国产第一区二区香蕉日日 | 欧美日韩一区二区综合 | 国产日产欧产精品精品推荐小说 | 亚洲成人黄色网 | 在线精品欧美日韩 | 国产麻豆入在线观看 | 婷婷尹人香蕉久久天堂 | 影院亚洲 | 毛片免费观看日本中文 | 99精品高清不卡在线观看 | 国产一区二区三区在线视频 | 在线观看精品视频一区二区三区 | 亚洲精品成人一区二区aⅴ 亚洲精品成人一区二区www | 国产精品久久久久影院色 | 欧美日韩亚洲综合在线一区二区 | 欧美一级久久久久久久久大 | 亚洲男人天堂2018 | 国内精品久久久久久久影视麻豆 | 一级做a爰片欧美一区 | 在线国产高清 | 国产精品自拍视频 | 毛片在线观看视频 | 免费99热在线观看 | 在线日本看片免费人成视久网 | 日本高清va不卡视频在线观看 | 手机看片福利永久 | 国产看片视频 |