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

Langage Java Discussion :

faire l'union deux listes


Sujet :

Langage Java

  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut faire l'union deux listes
    salut
    j'ai deux liste
    A =[[12,13,15],[134]]
    B=[[12,13,15],[1356]]
    je cherche a faire l'union entre deux liste A et B dans C de façon avoir
    C==[[12,13,15],[134],[1356]]éviter les doublons pas d'avoir C=[[12,13,15],[134],[12,13,15],[1356]]
    voila ce que je viens de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    C=A
    for (iterator i =B.iterator();i=hasnext();){
    C.add(i.next());}
    merci

  2. #2
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    Si ce sont des vecteurs,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
              c.addAll(a);
              for (Enumeration e = b.elements() ; e.hasMoreElements() ;) {
              Vector d =e.nextElement());
              if(!c.contains(d))
                      c.add(d);
     
              }

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    merci mais avec ma version ça marche pas
    comment ajouter cette partie a mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Vector d =e.nextElement());
              if(!c.contains(d))
                      c.add(d);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    C=A
    for (iterator i =B.iterator();i=hasnext();){
    C.add(i.next());}

  4. #4
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Ce que je®ome te propose c'est un code pour remplacer le tiens

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    mais son code ne fonctionne pas

  6. #6
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Qu'est ce que tu apelle ne fonctionne pas : erreur de compilation (si oui lesquelles?), erreur d'execution (qu'est ce que ça te donne).
    De plus il avait précisé que son code fonctionnais dans le cas ou tes listes était des Vector. Est ce bien le cas chez toi?

  7. #7
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    erreur sur la ligne for (Enumeration e = b.elements() ; e.hasMoreElements()

    message cannot resolve symbol :method elements ()in class java .util.arrayList

  8. #8
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Quand je®ome t'a donné ce code il ta précisé
    si ce sont des vecteurs
    hors d'après le message ce ne sont pas des vecteurs mais des ArrayList que tu as...

  9. #9
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    oui sont des ArrayList

  10. #10
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     c.addAll(a);
              for (int compteur=b.size()-1; compteur >=0; compteur ++;) {
              ArrayList d =(ArrayList) b.get(compteur);
              if(!c.contains(d))
                      c.add(d);
     
              }
    ceci devrait marcher pour les arrayList.

  11. #11
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    salut voila ce que je viens de faire mais j'ai toujours =[[12,13,15],[134],[12,13,15],[1356]]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    C=A;
               for (int j =0;j<B.size();j++) {
              ArrayList d =(ArrayList) B.get(j);
              if(!All.contains(d))
                      C.add(d);
     
              }
    System.out.println(C);
    je cherche a afficher =[[12,13,15],[134],[1356]]

  12. #12
    Membre éclairé Avatar de je®ome
    Inscrit en
    Octobre 2005
    Messages
    285
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 285
    Par défaut
    salut voila ce que je viens de faire mais j'ai toujours =[[12,13,15],[134],[12,13,15],[1356]]

    Code :

    C=A;
    for (int j =0;j<B.size();j++) {
    ArrayList d =(ArrayList) B.get(j);
    if(!All.contains(d))
    C.add(d);
    }
    System.out.println(C);


    je cherche a afficher =[[12,13,15],[134],[1356]]
    A quoi correspond All ?
    Pourquoi le contrôle d'apartennance à All et puis l'ajout à C ?
    Il faut vérifier que d ne se trouve pas dans C avant de l'insérer.

  13. #13
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    LE problème est que tes ArrayList ne sont pas égales dans le cas présent (même si elles ont le même contenu ce ne sont pas les mêmes objets).

    Il va donc falloir pour chaque ArrayList présente dans la liste à fusionner, vérifier qu'il n'existe pas déjà une liste possédant le même contenu dans la liste de destination, d'où une double boucle)

  14. #14
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    erreru de frappe c'est C au lieu de All
    voila
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    C=A; 
    for (int j =0;j<B.size();j++) { 
    ArrayList d =(ArrayList) B.get(j);
    if(!C.contains(d))
    C.add(d); 
    } 
    System.out.println(C);

  15. #15
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    vous avez une idée

  16. #16
    Membre chevronné Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Par défaut
    Déjà, évite de mettre C=A. Si tu modifies C, tu modifieras du même coup A puisque ce sont deux références qui pointent vers le même objet. Sinon, ce que tu peux faire est de développer ta propre collection qui hérite de ArrayList, et de redéfinir les méthodes equals et compareTo.

  17. #17
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    Citation Envoyé par ulysse031
    vous avez une idée
    Ben lis la dernière réponse de Sinok ... Ainsi que celle de Rayndell

  18. #18
    Membre éclairé
    Inscrit en
    Novembre 2006
    Messages
    630
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 630
    Par défaut
    salut je n'ai pas bien compris ,vous pouvez m'aidez a modifié et trouver l'erreur

  19. #19
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Par défaut
    comment valorises-tu les list A et B?

    pour ma part, ce code
    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
    28
    29
    30
    31
    public static void main(String[] args) {
    		List A = new ArrayList();
    		List B = new ArrayList();
    		List C;
    		List x = new ArrayList();
    		x.add(12);
    		x.add(13);
    		x.add(15);
    		A.add(x);
    		x = new ArrayList();
    		x.add(134);
    		A.add(x);
    		x = new ArrayList();
    		x.add(12);
    		x.add(13);
    		x.add(15);
    		B.add(x);
    		x = new ArrayList();
    		x.add(1356);
    		B.add(x);
    		C = A;
    		System.out.println("A=" + A);
    		System.out.println("B=" + B);
    		for (int j = 0; j < B.size(); j++) {
    			ArrayList d = (ArrayList) B.get(j);
    			if (!C.contains(d))
    				C.add(d);
    		}
     
    		System.out.println("C=" + C);
    	}
    donne le résultat attendu :
    A=[[12, 13, 15], [134]]
    B=[[12, 13, 15], [1356]]
    C=[[12, 13, 15], [134], [1356]]

  20. #20
    Membre chevronné Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Par défaut
    Le problème en faisant C.contains(d), Java comparera non pas les contenus (qui sont égaux) mais les adresses des objets (qui sont différentes). La solution est de parcourir manuellement chaque élément de tes listes, mais c'est un peu rébarbatif. La solution de mattheox, qui utilise uniquement des ArrayList, semble être la meilleure.

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/11/2014, 09h36
  2. [SP-2013] Faire communiquer deux listes via Workflow ?
    Par Karshick dans le forum SharePoint
    Réponses: 18
    Dernier message: 18/09/2014, 10h00
  3. [CR 2008] Oui ou non, Je peux faire l'UNION ALL de deux tables de deux BDD différentes
    Par Nour08 dans le forum SAP Crystal Reports
    Réponses: 12
    Dernier message: 16/11/2011, 09h53
  4. Faire une Union de deux tables sans passer par UNION
    Par allouchi dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/06/2011, 10h19
  5. Faire defiler deux listes avec une scroll bar
    Par mcdelay dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 23/05/2007, 14h54

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