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 :

Comparer 2 HashMap d'objets.


Sujet :

Collection et Stream Java

  1. #1
    Membre éclairé Avatar de Empty_body
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 681
    Par défaut Comparer 2 HashMap d'objets.
    Bonsoir,

    J'aimerais savoir si il existe un moyen pour comparer 2 HashMap d'objets. Mes HashMap ont la structure suivante :
    objet.getNom comme clé et comme contenu objet.
    La comparaison devrait se faire sur 2 niveaux :
    1 savoir si toutes les clés du 1er HashMap sont bien dans le second
    2 savoir si pour chaque clés présente dans le HashMap 1 et dans le HashMap2 les contenus sont bien identiques.
    Exemple :
    HashMap1 HashMap2
    Clé A objet A clé A objet A => tout est ok
    Clé B objet B clé B objet C => pas ok.
    Je vois pas trop comment m'y attaquer, quelqu'un aurait une idée?
    Merci.

  2. #2
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Ben tu parcours une Map et pour chaque clé tu vérifie que la deuxième Map la contient (méthode containsKey()) si oui tu vérifie que les objets correspondant sont égaux. Enfin tu vérifie que Map2 n'est pas d'éléments supplémentaires en comparant leur taille.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static <K, V> boolean equalsMap(Map<K, V> map1, Map<K, V> map2) {
        for(K key : map1.keySet()) {
            if(map2.containsKey(key)) {
                if(!map1.get(key).equals(map2.get(key))) {
                    return false;
                }
            } else {
                return false;
            }
        }
        return map1.size() == map2.size();
    }
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  3. #3
    Membre chevronné Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Par défaut
    Par rapport au code ci-dessus, j'aurais fait le test de la taille des Map en premier, car si elles sont différentes on peut dessuite déduire qu'elles sont différentes, seulement après je ferais le tests des entrées. C'est une petite optimisation qui peut être pratique si les Map sont importantes

  4. #4
    Membre éclairé Avatar de Empty_body
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 681
    Par défaut
    merci mais si je procède comme ceci :
    if(!map1.get(key).equals(map2.get(key))) {
    Je vais comparer l'adresse mémoire des 2 objets et non leur contenu, non?

  5. #5
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    @Scorpyosis tellement évident
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  6. #6
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Citation Envoyé par Empty_body
    merci mais si je procède comme ceci :

    Je vais comparer l'adresse mémoire des 2 objets et non leur contenu, non?
    Si la méthode equals() est correctement redéfini non.

    [edit] la méthode hashCode() est aussi importante cf ce post [/edit]
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  7. #7
    Membre chevronné Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Par défaut
    J'aime pas répondre à une question par une question, mais que cherches tu à faire exactement ? Il m'est rarement arrivé de devoir comparer deux map entre elles, n'y a t'il pas d'autre moyen à ton problème ? Quelles sont la tailles de ces map ? si elles peuvent être très grandes, il peut être intéressant de faire le test de leur égalité à chaque fois que l'on fait un put/remove avec l'élément qu'on ajoute/enlève, çela permet de répartir la charge sur l'ensemble de l'exécution plutôt que de faire une méthode de comparaison sur toutes les clés. Perso, je pense que ton problème pourrait être réglé par un autre moyen, enfin si c'est encore possible.

  8. #8
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Par défaut
    Un autre point important, pense à synchroniser les deux maps si tu travail en environnement multi-threads.
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster ;) (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag :resolu:

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

  9. #9
    Membre éclairé Avatar de Empty_body
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    681
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 681
    Par défaut
    Le 2 maps contiennent une 50taine de lignes... J'aimerais les comparer car les objets qu'elles contiennent me serviront à faire une mise à jour dans une arborescence de fichiers (map1) à partir des noms de fichier, de leur adresse et de leur contenu qui proviennent d'une db (map2). Dans la db, tout est à jour et dans l'arborescence, il manque des fichiers, certains ne sont pas à jour et d'autre sont spécifiquement modifiés pour les clients. La structure des maps est la suivante : la clé, objet.getnom, représente le nom du fichier. Le contenu est l'objet en lui même ( nom, contenu, url.)

  10. #10
    Membre chevronné Avatar de Scorpyosis
    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2004
    Messages : 365
    Par défaut
    Je ne suis pas sur d'avoir tout compris, Map1 et Map2 ont une structure identique, et Map2 est remplie par la DB, Map1 elle est remplie par ???
    Pourquoi ne pas tout faire avec la DB, vu que je suppose que la mise a jour a la fin est faite dans la DB non ?

  11. #11
    Membre émérite Avatar de g_rare
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 608
    Par défaut
    HashMap.equals(Object) :
    Returns true if the given object is also a map and the two maps represent the same mappings. More formally, two maps t1 and t2 represent the same mappings if t1.keySet().equals(t2.keySet()) and for every key k in t1.keySet(), (t1.get(k)==null ? t2.get(k)==null : t1.get(k).equals(t2.get(k))) .

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

Discussions similaires

  1. Comparer 2 tableaux d'objets
    Par skflers61 dans le forum Général Java
    Réponses: 1
    Dernier message: 30/11/2014, 01h03
  2. comparer 2 listes d'objets
    Par steph-declic dans le forum Langage
    Réponses: 6
    Dernier message: 02/06/2014, 20h47
  3. Itération sur une HashMap d'objets
    Par spottt dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 08/12/2011, 18h11
  4. comparer des ArrayList d'objets
    Par Empty_body dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 26/01/2007, 08h26
  5. Comparer deux structures d'objets
    Par rozwel dans le forum Langage
    Réponses: 9
    Dernier message: 25/01/2007, 10h45

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