IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Comparaison et création ArrayList


Sujet :

Collection et Stream Java

  1. #1
    Membre très actif Avatar de Cvanhove
    Homme Profil pro
    Concepteur Développeur Informatique
    Inscrit en
    Septembre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Concepteur Développeur Informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 174
    Par défaut Comparaison et création ArrayList
    Bonjour,

    Je cherche à comparer 2 ArrayList afin de créer une 3ème ArrayList qui contiendra les lignes qu'elles ont en commun.
    J'ai penser à une fonction de ce type mais je ne suis pas persuader de ce que je fait.
    Quelqu'un a déjà été confronté à ce pb? je ne pense pas que parcourir manuellement les listes soit le plus performant mais je ne sais pas comment procéder autrement...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    public List<PersonnePP> compareListPP(List<PersonnePP> List1, List<PersonnePP> List2) {
    	//Storing the comparison output in ArrayList<PersonnePP>
    	ArrayList<PersonnePP> List3= new ArrayList<PersonnePP>();
    	for (PersonnePP temp : List1)
    	List3.add(List2.contains(temp) ? temp);
    }
    Cordialement

  2. #2
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Si tes éléments sont "uniques" dans les listes alors il s'agit plutôt d'ensemble (Set).

    Et dans ce cas, tu peux utiliser retainAll
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  3. #3
    Membre très actif Avatar de Cvanhove
    Homme Profil pro
    Concepteur Développeur Informatique
    Inscrit en
    Septembre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Concepteur Développeur Informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 174
    Par défaut
    Justement, je ne suis pas persuader qu'ils soit "uniques", là est tous le problème

  4. #4
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Trois questions :
    1. Que cherches-tu à faire in fine ?
    2. Quel comportement souhaites-tu avoir dans le cas de doublons ? Une seule fois, autant de fois en commun, tout cumulé
    3. L'ordre des éléments est-il important ? Si oui, faut-il conserver l'ordre de la première ou celle de la seconde ?
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  5. #5
    Membre très actif Avatar de Cvanhove
    Homme Profil pro
    Concepteur Développeur Informatique
    Inscrit en
    Septembre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Concepteur Développeur Informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 174
    Par défaut
    Exemple :

    List1 : Xavier, Francois, Patrick, Patrick
    List2 : Patrick, Francois, Paul, Michel

    List3 (Résultat) : Patrick, Francois

    Je souhaite éviter les doublons en effet, l'ordre n'a pas d'importance.

  6. #6
    Rédacteur/Modérateur
    Avatar de Logan Mauzaize
    Homme Profil pro
    Architecte technique
    Inscrit en
    Août 2005
    Messages
    2 894
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : Transports

    Informations forums :
    Inscription : Août 2005
    Messages : 2 894
    Par défaut
    Construis un Set avec la première liste, puis utilises retainAll() avec la seconde.
    Java : Cours et tutoriels - FAQ - Java SE 8 API - Programmation concurrente
    Ceylon : Installation - Concepts de base - Typage - Appels et arguments

    ECM = Exemple(reproduit le problème) Complet (code compilable) Minimal (ne postez pas votre application !)
    Une solution vous convient ? N'oubliez pas le tag
    Signature par pitipoisson

  7. #7
    Membre très actif Avatar de Cvanhove
    Homme Profil pro
    Concepteur Développeur Informatique
    Inscrit en
    Septembre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Concepteur Développeur Informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 174
    Par défaut
    Ok je vais essayer ça, merci

  8. #8
    Membre Expert
    Avatar de eulbobo
    Homme Profil pro
    Développeur Java
    Inscrit en
    Novembre 2003
    Messages
    786
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Novembre 2003
    Messages : 786
    Par défaut
    Et n'oublie pas d'étendre les méthodes equals et hashCode dans tes classes PersonnePP, parce que sinon tu risques d'avoir du mal à avoir un fonctionnement cohérent avec le HashSet
    http://jmdoudoux.developpez.com/cours/developpons/java/

  9. #9
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    Une autre solution utilisant les Streams de Java 8 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
        List<String> list1 = Arrays.asList("Xavier", "Francois", "Patrick", "Patrick");
        List<String> list2 = Arrays.asList("Patrick", "Francois", "Paul", "Michel");
     
        List<String> result = list1.stream()
            .filter(list2::contains)        // On n'accepte que les éléments contenu dans la list2
            .distinct()                     // On supprime les doublons
            .collect(Collectors.toList());  // Et on stocke le résultat dans une liste
     
        System.out.println(result); // [Francois, Patrick]

    a++

  10. #10
    Membre très actif Avatar de Cvanhove
    Homme Profil pro
    Concepteur Développeur Informatique
    Inscrit en
    Septembre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Concepteur Développeur Informatique

    Informations forums :
    Inscription : Septembre 2014
    Messages : 174
    Par défaut
    Je fais remonter la discussion car je reviens sur ce problème (j’étais sur autre chose).
    Je ne comprend pas comment manipuler un objet HashSet :/
    Du coup j'ai trouver un morceau de code qui semble presque faire ce que je veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    //ON enleve de a tous les elements présent dans b
    a.removeAll(b);
    //On enleve 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);
    Sauf que au lieu de garder les différences comme ci dessus, je veux garder les similitudes, une idée?

  11. #11
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,
    Citation Envoyé par Cvanhove Voir le message
    Sauf que au lieu de garder les différences comme ci dessus, je veux garder les similitudes, une idée?
    retainAll() ?

    Citation Envoyé par Cvanhove Voir le message
    Je ne comprend pas comment manipuler un objet HashSet :/
    Un HashSet indexe les éléments qu'on y met par leur hashcode (qui permet de faire un arbre de hashage, qui permet de retrouver plus rapidement une valeur qui s'y trouve (je passe sur le détail) : l'important donc, c'est d'implémenter hashCode() mais aussi equals() (voir leur documentation), et que ces éléments soient immutables. Le HashSet garantit que parmi n valeurs égales (au sens qu'elle vérifie equals()), donc de même hashCode, une seule sera conservée dans le set.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Set<Integer> set = new HashSet<>();
    // j'ajoute 10 fois 42 dans mon hashSet
    for(int i=0; i<10; i++) {
       set.add(42);
    }
    System.out.println(set.size() + " - " + set);
    Ce code affiche :
    1 - { 42 }
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Comparaison entre deux ArrayList
    Par mouned dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 11/01/2015, 12h56
  2. comparaison de 2 arraylist<Integer>
    Par livinho38 dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 20/05/2010, 14h57
  3. Comparaison de 2 ArrayList
    Par ramanov dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 05/05/2008, 14h47
  4. Comparaison avec un ArrayList
    Par zonez dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 31/05/2007, 17h39
  5. Comparaison des éléments d'une ArrayList
    Par Emilie MARQUOIS-OGEZ dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 31/10/2006, 15h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo