N'est-il pas bon d'augmenter la longueur du corps de la boucle lors de l'utilisation d'une boucle java for ?
某草草
某草草 2017-06-28 09:23:52
0
7
867
   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 ? ?

某草草
某草草

répondre à tous(7)
过去多啦不再A梦

N'utilisez pas for(:){},用 for(int i = 0; i < list.size(); i++), veillez à ne pas créer une boucle infinie

大家讲道理

Dans 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 :

  1. Utilisez la syntaxe de break label (je ne l'ai jamais utilisée auparavant, vous pouvez la rechercher sur Google) ;

  2. C’est la méthode que vous utilisez, définissez un drapeau.
  3. Aussi,
.

世界只因有你

C'est un long chemin à parcourir pour écrire. Mes mots s'écriront ainsi :

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

Votre code d'origine comporte plusieurs domaines qui doivent être optimisés :

  1. Essayez d'éviter les doubles boucles, la boucle intérieure doit généralement être extraite ;

  2. 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

  3. ;
  4. 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.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal