IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Groovy Java Discussion :

Modifier une map/liste dans une boucle


Sujet :

Groovy Java

  1. #1
    Invité
    Invité(e)
    Par défaut Modifier une map/liste dans une boucle
    Bonjour à tous,

    Mon titre n'est peut être pas 100% clair mais j'avais du mal à l'exprimer.

    J'ai une map, pour laquelle la valeur est une liste.
    Je me retrouve donc avec quelque chose du style :
    myMap[obj1] = [obj1-1, obj1-2]
    myMap[obj2] = [obj2-1]
    myMap[obj3] = [obj3-1, obj3-2, obj3-3]
    (clé = groupe / valeur = liste de users)

    Enfin j'aimerai, mais ça ne fonctionne pas quand j'alimente la liste, et je ne sais pas pourquoi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
     
    def groupsMap = [:]
    for (it in sql.rows(groupsQuery)) {
      def group = [:]
      if (it.parent_id != group?.id) {
        // new group to process
        group.put("id", it.parent_id)
        group.put("name", it.parent_name)
        groupsMap.put(group, [])
      }
     
        // create the child
        def child = [:]
        child.put("id", it.child_id)
        child.put("name", it.child_name)
        child.put("type", it.child_type)
     
        // get current child list and add new child
        tempChildList = groupsMap.get(group);
        if (tempChildList.size() > 0) {
          println 'tempChildList is not empty'
        }
        tempChildList.add(child);
        println '..... group ' + group.get("id") + ' size ' + tempChildList.size()
        groupsMap.put(group, tempChildList)
    }
    En résultat je ne vois jamais "tempChildList is not empty"
    Pourtant j'ai au moins 1 groupe pour lequel j'ajoute 3 users. Voici un extrait de la sortie sur la console :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ..... group 14659717 size 1
    ..... group 14659717 size 1
    ..... group 14659717 size 1
    Est-ce que quelqu'un vois où est mon erreur ?

    Merci pour votre aide.

    PS: Je suis débutant en Groovy, et j'utilise la version 1.8.3

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bon, le week-end m'a été bénéfique.
    ( on devrait toujours être en week-end )


    Déjà faire le "def" de l'objet group hors de la boucle (sinon à chaque fois ça fait un nouveau groupe, erreur d'algo de ma part).
    Ensuite en créant une nouvelle instance du groupe lors du test "new group" ( si je ne le faisais pas, j'avais bien autant de clés que de groupes dans ma Map, mais toutes les clés avaient pour id et name les valeurs récupérées dans la dernière boucle ). J'ai pas encore tout bien saisi le mécanisme, mais bon.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    def groupsMap = [:]
    def group = [:]
    for (it in sql.rows(groupsQuery)) {
      if (it.parent_id != groupObj?.id) {
        // new group to process
        group = [:]
        group.put("id", it.parent_id)
        group.put("name", it.parent_name)
        groupsMap.put(groupObj, [])
      }
     
      // create the child
      def child = [:]
      child.put("id", it.child_id)
      child.put("name", it.child_name)
      child.put("type", it.child_type)
     
      // get current child list and add new child
      tempChildList = groupsMap.get(group);
      if (tempChildList.size() > 0) {
          println 'tempChildList is not empty'
      }
      tempChildList.add(child);
      println '..... group ' + group.get("id") + ' size ' + tempChildList.size()
      groupsMap.put(group, tempChildList)
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 13/11/2009, 16h06
  2. configuration d'un bean, list dans une map
    Par Fennec. dans le forum Spring Web
    Réponses: 0
    Dernier message: 06/04/2009, 21h19
  3. Réponses: 1
    Dernier message: 24/10/2007, 15h56
  4. Réponses: 3
    Dernier message: 25/01/2007, 08h54
  5. Rechercher les element d'une liste dans une autre liste
    Par fessebleu dans le forum Langage
    Réponses: 30
    Dernier message: 24/04/2006, 21h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo