Comparer les éléments de 2 ArrayList

Messages postés
1
Date d'inscription
vendredi 19 août 2005
Dernière intervention
21 février 2006
- 21 févr. 2006 à 23:04 - Dernière réponse :
Messages postés
5292
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
12 novembre 2018
- 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 

Votre réponse

6 réponses

Messages postés
1
Date d'inscription
mardi 21 février 2006
Dernière intervention
21 février 2006
- 21 févr. 2006 à 23:20
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
Dernière intervention
3 mai 2006
- 22 févr. 2006 à 12:20
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
5292
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
12 novembre 2018
- 10 oct. 2017 à 10:56
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]


Messages postés
15827
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
18 novembre 2018
- 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...
Messages postés
5292
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
12 novembre 2018
>
Messages postés
15827
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
18 novembre 2018
- 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.