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);
}
}
Par exemple, dans le code ci-dessus, si je n'entre pas dans le deuxième niveau de la boucle for, j'effectuerai une opération d'ajout sur la liste. Il ne devrait y avoir aucun problème ici, car ce que j'opère dans le premier corps de la boucle for est la taille () de la seconde boucle for. Je me souviens d'une situation où for(){...} j'ai directement utilisé size() de for in... Cela semble impossible au début, mais je n'y pense pas. pour le moment. Un maître peut-il m'aider à rappeler les souvenirs ? ?
N'utilisez pas
for(:){}
,用for(int i = 0; i < list.size(); i++)
, veillez à ne pas créer une boucle infinieDans la boucle for each, c'est-à-dire la boucle for(a : as) dans votre code, vous ne pouvez pas ajouter ou supprimer la collection en boucle, sinon une ConcurrentModificationException sera signalée
Il n'y a aucun problème dans ce code. Parce que toutes vos opérations de modification de liste se font en dehors de la boucle interne.
En fonction de vos besoins, il s'agit en fait de compter les données de chaque ville par province. Si vous disposez des conditions pour utiliser Java 8, vous pouvez jeter un œil à la méthode GroupBy de Stream. Peut grandement simplifier le code.
Pour certains problèmes sans rapport, la méthode set pour définir une liste n'est pas appropriée.
S'il s'agit d'un objet avec une logique métier, la structure interne doit être packagée et une interface doit être fournie basée sur les concepts du domaine métier, et la collection interne ne doit pas être directement exposée.
Même s'il s'agit d'un objet de transfert de données, il ne doit pas fournir la méthode définie de l'attribut de collection. En général, le cycle de vie d'une variable de collection privée doit être géré par son objet parent. Le monde extérieur exploite la collection privée via la méthode d'ajout ou de suppression de l'objet d'emballage extérieur. Si nécessaire, fournissez une méthode get de collection. Vous devez vous demander s'il faut le copier ou le rendre immuable.
Vous ne pouvez pas utiliser de liste (ajouter, supprimer, etc.) dans foreach
Si vous souhaitez sortir directement de la boucle à deux niveaux, il n'y a que deux manières :
Utilisez la syntaxe de
break label
(je ne l'ai jamais utilisée auparavant, vous pouvez la rechercher sur Google) ;C'est un long chemin à parcourir pour écrire. Mes mots s'écriront ainsi :
Votre code d'origine comporte plusieurs domaines qui doivent être optimisés :
Essayez d'éviter les doubles boucles, la boucle intérieure doit généralement être extraite ;
Pour les opérations sur une même variable, les lignes de code doivent être regroupées le plus possible, afin que la lecture soit plus naturelle
La dénomination des variables doit refléter sa signification commerciale et son type principal. Par exemple, les objets List doivent être nommés xxxList autant que possible. Je suis trop paresseux pour changer ça pour toi.
Je ne comprends pas ce que vous demandez. Est-ce parce que je ne peux pas entrer ?
Organisez vos pensées avant de poser des questions. Que voulez-vous demander ? Quelle réponse espérez-vous obtenir ? Sinon, les autres ne pourront pas répondre à votre place.