Comparer les éléments de 2 ArrayList

Signaler
Messages postés
1
Date d'inscription
vendredi 19 août 2005
Statut
Membre
Dernière intervention
21 février 2006
-
Twinuts
Messages postés
5345
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
11 février 2020
-
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

4 réponses

Messages postés
1
Date d'inscription
mardi 21 février 2006
Statut
Membre
Dernière intervention
21 février 2006

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);

@+
Messages postés
388
Date d'inscription
mercredi 1 octobre 2003
Statut
Membre
Dernière intervention
3 mai 2006
1
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) ;

}
Dans ce cas il vaut mieux utiliser CollectionUtils.disjunction(...)
Messages postés
5345
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
11 février 2020
90
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
16116
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 février 2020
89
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
5345
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
11 février 2020
90 > KX
Messages postés
16116
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 février 2020

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