Comparer les éléments de 2 ArrayList

vince_95150 1 Messages postés vendredi 19 août 2005Date d'inscription 21 février 2006 Dernière intervention - 21 févr. 2006 à 23:04 - Dernière réponse : Twinuts 5251 Messages postés dimanche 4 mai 2003Date d'inscriptionModérateurStatut 30 octobre 2017 Dernière intervention
- 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 
1Messages postés vendredi 19 août 2005Date d'inscription 21 février 2006 Dernière intervention

6 réponses

Répondre au sujet
aminebousta 1 Messages postés mardi 21 février 2006Date d'inscription 21 février 2006 Dernière intervention - 21 févr. 2006 à 23:20
0
Utile
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
bloofi 388 Messages postés mercredi 1 octobre 2003Date d'inscription 3 mai 2006 Dernière intervention - 22 févr. 2006 à 12:20
0
Utile
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
Utile
Dans ce cas il vaut mieux utiliser CollectionUtils.disjunction(...)
Commenter la réponse de jpl
Twinuts 5251 Messages postés dimanche 4 mai 2003Date d'inscriptionModérateurStatut 30 octobre 2017 Dernière intervention - 10 oct. 2017 à 10:56
0
Utile
2
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 15087 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 12 décembre 2017 Dernière intervention - 10 oct. 2017 à 13:51
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 5251 Messages postés dimanche 4 mai 2003Date d'inscriptionModérateurStatut 30 octobre 2017 Dernière intervention > KX 15087 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 12 décembre 2017 Dernière intervention - 10 oct. 2017 à 14:35
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.