Salut,
j'aimerais pouvoir comparer 2 ArrayList d'objets et pouvoir placer dans un 3ème les différences qu'il y a entre les 2 premiers. Est-ce possible?
Salut,
j'aimerais pouvoir comparer 2 ArrayList d'objets et pouvoir placer dans un 3ème les différences qu'il y a entre les 2 premiers. Est-ce possible?
Salut,
ça irait ? (il y a peut-être plus simple, je n'ai pas testé 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 ArrayList list1 = new ArrayList(); ArrayList list2 = new ArrayList(); // ... ArrayList list1Copy = new ArrayList(); Collections.copy(list1Copy, list1); ArrayList list2Copy = new ArrayList(); Collections.copy(list2Copy, list2); list1Copy.removeAll(list2); list2Copy.removeAll(list1); ArrayList dif = new ArrayList(); dif.addAll(list1Copy); dif.addAll(list2Copy);
Tu veux les différences (la différence ensembliste) entre le 1er et le 2e, ou entre le 2e et le 1er?Envoyé par Empty_body
Pour le 1er moins le 2e :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 List<TonType> list = new ArrayList<TonType>(taListe1); list.removeAll(taListe2);
Bien sur que c'est possible; Il te suffit parcourir une ArrayList et de regarder si ton object est present ou non dans ta 2ieme ArrayList. En fonction du resultat tu met ou non l'object dans l'arrayList 3. Et tu supprimes l'object s'il est present dans l'arraylist 2. Et a la fin tu met ce qui reste de l'arraylist 2 dans la 3.
A mon avis, il veut mettre dans une 3ème ArrayList :
- Les éléments présents dans la liste 1 mais pas dans la liste 2.
- Les éléments présents dans la liste 2 mais pas dans la liste 1.
J'ai eu à rencontrer le même problème un jour. Je remplissais une ComboBox dans un formulaire de modification. Les choix de la comboBox étaient des champs d'une colonne d'une de mes tables.
A la validation de la modification, je devais donc comparer les éléments de l'ancienne et de la nouvelle comboBox. Comme l'utilisateur pouvait ajouter ou supprimer des éléments dans la comboBox, j'étais donc confronté au même problème à savoir :
- je devais regarder les éléments communs entre l'ancienne et la nouvelle combo.
- si des valeurs étaient présentes dans l'ancienne et plus dans la nouvelle, je devais retirer l'enregistrement contenant cette valeur dans la base de données.
- si des valeurs étaient présentes dans la nouvelle et pas dans l'ancienne, je devais ajouter un enregistrement dans la base de données avec cette nouvelle valeur.
Pour me simplifier la tâche, j'avais fait un truc pas très propre mais bon dans l'urgence j'ai improvisé. Je sélectionnais tous les enregistrements dans la base de données qui contenaient les valeurs de l'ancienne combo, les supprimer et rajouter toutes les valeurs de la nouvelle combo, quitte à recréer des enregistrements qui existaient déjà.
Voilà j'espère avoir bien compris ton problème
En faite c'est assez simple;
Tu as ta premiere ArrayList a et ta deuxieme b;
Tu prend une ArrayList temporaire temp qui contient tout les enregistrements de a;
Tu fais :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 //ON enleve de a tous les elements présent dans b a.removeAll(b); //On enelve ensuite de b tous les elements dans a => temp car a a été modifié; b.removeAll(temp); //Ensuite on a que les differences dans a et b. IL suffit de prendre a et de rajouter tous les enregistrements de b; a.addAll(b); //Et dans a tu auras les differences!
Petite remarque : il faut que la méthode equals soit défini sur ton Object
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager