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 :

Différence entre 2 arrayList


Sujet :

Collection et Stream Java

  1. #1
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut Différence entre 2 arrayList
    Bonjour à tous,

    J'ai en ma possession 2 arrayList d'objet : newone et oldone.
    oldone contient des objets qui sont présent dans une base sqlite.
    newone contient une mise à jour de ces objets , plus précisément selon son contenu je vais ajouter des objets dans la bdd (objet non présent dans oldone) ou en supprimer (objet présent dans oldone mais plus dans newone).

    Mon idée est de faire la différence entre les arrayList (c'estcomme ça que je fait en php). Donc avant de me lancer dans une différence manuelle je me demandais si il existait pas quelques chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ArrayList<Objet> aAjouter = newone.diff(oldone); // retourne les objet de newone non présent dans oldone
    ArrayList<Objet> aSupprimer = oldone.diff(newone);
    merci
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  2. #2
    Membre averti
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    250
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2011
    Messages : 250
    Points : 403
    Points
    403
    Par défaut
    Pourquoi pas un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    List<Object> aAjouter = newone.removeAll(oldone);

  3. #3
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Je n'y avais pas pensé parce que ça renvoi un boolean mais effectivement en faisant quelque chose comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ArrayList<Objet> toAdd = newone;
    ArrayList<Objet> toDelete = oldone;
     
    toAdd.removeAll(oldone);
    toDelete.removeAll(newone);
    Ca devrait le faire.

    Par contre au moment où je fais toAdd.removeAll(oldone); c'est bien toAdd qui est modifié et pas newOne ? En gros est ce que le tableau est copié ou alors c'est juste une référence et en travaillant sur toAdd j'agie forcément sur newone ?
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    Chef programmeur
    Inscrit en
    Août 2006
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Belgique

    Informations professionnelles :
    Activité : Chef programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 073
    Points : 7 978
    Points
    7 978
    Par défaut
    Citation Envoyé par grunk Voir le message
    Par contre au moment où je fais toAdd.removeAll(oldone); c'est bien toAdd qui est modifié et pas newOne ?
    Oui, et pour le verifier il y'a le debuggeur ou des affichages en console
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    je relance le sujet car visiblement en faisant ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ArrayList<Objet> toAdd = newone;
    ArrayList<Objet> toDelete = oldone;
     
    toAdd.removeAll(oldone);
    toDelete.removeAll(newone);
    J'ai pas le comportement attendu.

    Admettons que newone contiennent A et B. Oldone quant à lui contient B.

    Donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    toAdd = A,B
    toDelete = B
    Après toAdd.removeAll(oldone); pas de problème toAdd vaut bien A. Mais newone à lui aussi été modifié et donc toDelete.removeAll(newone); n'est plus correcte car il n'est pas effectué avec mes données de départ.

    Comment puis je faire pour assigner toADD et toDelete au valeur de newone et oldone sans pour autant modifié ces dernières quand j'agis sur les premières ?
    En gros comment copié newone dans toAdd et non pas simplement faire une référence ?

    merci
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  6. #6
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Bonjour,

    D'intuition il faut que tu clones tes tableaux List.clone() il me semble.

    Le problème c'est que tu cloneras uniquement ton tableau, si à l'intérieur tu as des objets il faut aussi les cloner.

    Pour faire simple pour avoir une copie d'un tableau d'objet, modifiable sans toucher à l'original il faut faire du clonage à la chaîne .

    Ce que tu peux faire pour tes tableaux toADD et toDELETE c'est de faire new ArrayList() et de passer des clones des objets du tableau original. Comme sa tu seras tranquille.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. La différence entre deux ArrayList
    Par loudji dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 21/07/2013, 18h24
  2. [Liste] Différence entre LinkedList et ArrayList ?
    Par wafiwafi dans le forum Collection et Stream
    Réponses: 25
    Dernier message: 30/01/2011, 14h16
  3. Différence entre Vector et ArrayList
    Par menzlitsh dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 29/03/2009, 14h32
  4. Différence entre array arraylist ?
    Par sauceaupistou dans le forum Framework .NET
    Réponses: 7
    Dernier message: 28/03/2008, 22h01
  5. Différences entre ArrayList et Vector
    Par lionrouge dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 29/05/2006, 20h12

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