Comparer les éléments de 2 ArrayList

Messages postés
1
Date d'inscription
vendredi 19 août 2005
Statut
Membre
Dernière intervention
21 février 2006
- - Dernière réponse : Twinuts
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
- 10 oct. 2017 à 14:35
Bonsoir à tous,
J'ai une première liste (liste1) qui contient des noms de logiciels. Ma seconde liste (liste2) contient aussi des noms de logiciels, qui peuvent être les mêmes que ceux dans liste1 mais différents aussi.
Comment puis-je faire pour remonter les éléments différents entre les 2 listes dans une nouvelle liste??

Exemple:
liste1=("Word","Excel","Access","Project");
liste2=("Word","Excel","PowerPoint");
> ça me renvoi liste3=("Access","Project","PowerPoint");

Si vous avez des sources ou des idées c'est avec plaisir car c'est assez urgent et je bloque là dessus .
Merci beaucoup
Afficher la suite 

4 réponses

Messages postés
1
Date d'inscription
mardi 21 février 2006
Statut
Membre
Dernière intervention
21 février 2006
0
Merci
Bonjour Monsieur Vince 95150,

N'hésitez pas à utiliser la librairie open source "Apache Collections" pour manipuler les ensembles.
http://jakarta.apache.org/commons/collections/
La méthode que vous cherchez est ListUtils.intersection(liste1, liste2);

@+
Commenter la réponse de aminebousta
Messages postés
388
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
3 mai 2006
1
0
Merci
ou alors tu boucle sur la 1ere liste et pour chaque élément :
si liste2 ne contient pas element de liste 1
alors ajouterDansListe3(element)
et tu faits pareil avec la liste 2

ex :
Iterator it = liste1.iterator() ;
while(it.hasNext()){
Object o = it.next() ;
if( ! liste2.contains( o ) liste3.add( o) ;
}
Iterator it2 = liste2.iterator() ;

while(it2.hasNext())

{

Object o = it2.next() ;

if( ! liste1.contains( o ) liste3.add( o) ;

}
Commenter la réponse de bloofi
0
Merci
Dans ce cas il vaut mieux utiliser CollectionUtils.disjunction(...)
Commenter la réponse de jpl
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
85
0
Merci
Salut,

Sinon:
Collection<String> l1 = new ArrayList<>(Arrays.asList("Word","Excel", "Access", "Project"));
Collection<String> l2 = new ArrayList<>(Arrays.asList("Word", "Excel", "PowerPoint"));

List<String> toReturn = new ArrayList<>();
/* Diff entre l1 et l2 */
List<String> diff = new ArrayList<>(l1);
diff.removeAll(l2);
toReturn.addAll(diff);

/* Diff entre l2 et l1 */
diff = new ArrayList<>(l2);
diff.removeAll(l1);
toReturn.addAll(diff);

System.out.println(toReturn);


Affiche:
[Access, Project, PowerPoint]


KX
Messages postés
16034
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
13 octobre 2019
88 -
Bonjour,

Ça déterre du vieux sujet dis donc !

public static <T> Set<T> diff(Collection<T> aList, Collection<T> bList) {
   return Stream.concat(
      aList.stream().filter(aValue -> !bList.contains(aValue)),
      bList.stream().filter(bValue -> !aList.contains(bValue))
   ).collect(Collectors.toSet());
}

NB. Ce code n'était pas possible en 2006...
Twinuts
Messages postés
5340
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
3 septembre 2019
85 > KX
Messages postés
16034
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
13 octobre 2019
-
Arf, effectivement, d’habitude je regarde mieux mais là je n'ai pas fait attention à la date...

Il faut que je regarde de plus près les streams
Commenter la réponse de Twinuts