Maison  >  Questions et réponses  >  le corps du texte

N'est-il pas bon d'augmenter la longueur du corps de la boucle lors de l'utilisation d'une boucle java for ?

   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 ? ?

某草草某草草2669 Il y a quelques jours807

répondre à tous(7)je répondrai

  • 过去多啦不再A梦

    过去多啦不再A梦2017-06-28 09:25:52

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

    répondre
    0
  • 大家讲道理

    大家讲道理2017-06-28 09:25:52

    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.

    répondre
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-28 09:25:52

    Vous ne pouvez pas utiliser de liste (ajouter, supprimer, etc.) dans foreach

    répondre
    0
  • 伊谢尔伦

    伊谢尔伦2017-06-28 09:25:52

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

    répondre
    0
  • 世界只因有你

    世界只因有你2017-06-28 09:25:52

    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.

    répondre
    0
  • 为情所困

    为情所困2017-06-28 09:25:52

    Je ne comprends pas ce que vous demandez. Est-ce parce que je ne peux pas entrer ?

    répondre
    0
  • 滿天的星座

    滿天的星座2017-06-28 09:25:52

    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.

    répondre
    0
  • Annulerrépondre