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 :

Problème avec HashMap


Sujet :

Collection et Stream Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Points : 72
    Points
    72
    Par défaut Problème avec HashMap
    Bonjour,
    Dans mon programme je veux retournée l'ensemble des valeurs de mon HashMap sous forme de Set. pour bien comprendre mon problème voici un exemple: soit ma fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    public Set lookup()
    {
    HashMap hashMap = new HashMap<String, Integer>();
     
            hashMap.put("One", new Integer(1)); // adding value into HashMap
     
            hashMap.put("Two", new Integer(1));
     
            hashMap.put("Three", new Integer(3));
     
            return setA.entrySet();
    }
    le problème c'est que, quand je reçois le setA.entrySet(), je peux pas récupérer 1, 1, 3 mais je récupère : Three=3, Two=1 et One = 1.

    et si je déclare un Set dans la fonction lookup et je récupère valeur par valeur du hashMap, j'aurai pas deux fois le 1 mais qu'un seul 1 !!!

    y'aura t'il une solution s'il vous plait ?

  2. #2
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par mimish Voir le message
    et si je déclare un Set dans la fonction lookup et je récupère valeur par valeur du hashMap, j'aurai pas deux fois le 1 mais qu'un seul 1 !!!

    y'aura t'il une solution s'il vous plait ?
    Tu ne pourras pas récupérer 1, 1, 3 dans un Set puisque le but d'un Set est je cite la javadoc :
    Citation Envoyé par Javadoc
    A collection that contains no duplicate elements.
    Tu peux toujours faire hashMap.values() pour obtenir 1, 1, 3 mais dans une Collection.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    entrySet, comme le dit la doc, ça te retourne les paires clé/valeur. Pour n'avoir que les valeur, c'est la méthode values() qu'il faut appeler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public Collection<Integer> lookup(){
            Map<String, Integer> hashMap = new HashMap<String, Integer>();
            hashMap.put("One", new Integer(1)); // adding value into HashMap
            hashMap.put("Two", new Integer(1));
            hashMap.put("Three", new Integer(3));
            return hashMap.values();
    }
    Aussi, tu ne pourra jamais faire un Set comme tu le veux puisque par définition un Set n'a pas de données en double, alors que les valeur d'une Map peuvent être des doublons (comme tu l'a fais dans ton exemple).

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Points : 72
    Points
    72
    Par défaut
    Merci pour votre réponse,
    mais le type du retour de ma fonction est Set.
    y'a pas une méthode pour récupérer 1 1 et 3 de hashMap.entrySet(); ??

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    un Set ne peux pas avoir deux valeur identique, c'est dans la javadoc, ça fait partie du contrat. Il va falloir changer la valeur de retour de votre méthode si vous voulez renvoyer toutes les valeurs même dupliqués.

  6. #6
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Points : 13 670
    Points
    13 670
    Par défaut
    Citation Envoyé par mimish Voir le message
    Merci pour votre réponse,
    mais le type du retour de ma fonction est Set.
    y'a pas une méthode pour récupérer 1 1 et 3 de hashMap.entrySet(); ??
    Eh bien tu peux faire quelque chose comme ça je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ArrayList arrayList = hashMap.values();
    Set set = new HashSet(arrayList);
    Sauf qu'en sortie tu auras 1 et 3 comme éléments à l'intérieur seulement.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    158
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 158
    Points : 72
    Points
    72
    Par défaut
    Ok, je vous remercie beacoup

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

Discussions similaires

  1. [HashMap] Problèmes avec HashMap (redéfinition de HashCode etc.)
    Par Dominique49 dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 01/09/2011, 11h37
  2. Problème avec une HashMap (STL/SGI)
    Par nphilippe1684 dans le forum C++
    Réponses: 22
    Dernier message: 16/02/2011, 16h06
  3. problème d'écrassement avec hashmap
    Par robert_trudel dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 30/07/2008, 19h46
  4. Problème avec Hashmap et ArrayList!
    Par Angie73 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 11/05/2008, 21h31
  5. Problème avec le type HashMap
    Par GDMINFO dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 06/04/2007, 13h40

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