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 :

[HashMap] - Problème de parcours


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 49
    Par défaut [HashMap] - Problème de parcours
    Salut !

    J'ai un souci avec une hashmap, avant, j'introduis le problème.
    Je dois gérer un hopital (simplement), j'ai des patients identifiés par leur SSN (social security number) et des docteurs identifiés par leur numéro de badge.
    Un patient ne peut avoir qu'un docteur, un docteur peut avoir plusieurs patients.

    Pour gérer tout ça, j'utilise donc les collections (import java.util.*) et trois tables de hachage (pour la recherche par clé).
    La première pour gérer les patients admis dans l'hopital, la clé est le SSN du patient, la valeur le nom du patient.
    La seconde pour gérer les médecins de l'hopital, la clé est le numéro du badge, la valeur le nom du docteur.
    La troisième link les patients aux docteurs avec comme clé le nom du patient.

    A partir de là, j'arrive à faire toutes les fonctions qui peuvent me servir, sauf celle qui affiche tous les patients affiliés à un docteur donné.

    J'ai en paramètre l'id du badge du médecin.
    Donc je scanne ma table de hachage numéro 3 suivant les values, et à chaque fois que je trouve l'id du badge ben... ben je fais quoi ? Vu que j'utilise un iterator sur les values et pas sur les keys, une fois que j'ai la value souhaitée, je sais pas comment retrouver la clé qui lui était associée. J'ai farfouillé la doc java dans java.util, et j'ai rien trouvé qui puisse me servir (à supposer que j'utilise un KeySet, là j'aurai que les clefs, et je peux pas faire de recherche dessus vu qu'en paramètre de la méthode j'ai le badge ID, et que le KeySet ne me gardera que les SSN).

    Je mets mon code quand même, ça peut servir (la partie qui coince est la dernière méthode, et j'ai tout commenté étant donné que ça ne me donnait pas le résultat escompté).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    package hospital;
     
    import java.util.*;
     
    public class Hospital {
       private HashMap<String,Patient> patientsMap;
       private HashMap<Integer,Doctor> doctorsMap;
       private HashMap<String,Integer> patientDoctorMap;
     
       public Hospital(){
          patientsMap = new HashMap<String,Patient>();
          doctorsMap = new HashMap<Integer,Doctor>();
          patientDoctorMap = new HashMap<String,Integer>();
       }
     
       public void addPatient(String first, String last, String ssn) {
          Patient p = new Patient(first,last,ssn);
          patientsMap.put(ssn, p);
       }
     
       public void addDoctor(String first, String last, int docID) {
          Doctor d = new Doctor(first,last,docID);
          doctorsMap.put(docID, d);
       }
     
       public void assignPatientToDoctor(String ssn, int docID) {
          patientDoctorMap.put(ssn, docID);
       }
     
       public void printDoctorOfPatient(String ssn)  {
          int i = patientDoctorMap.get(ssn);
          System.out.println(doctorsMap.get(i).getLastName());
       }
     
       public void printPatientsOfDoctor(int docID) {
          //for (Iterator<String> i = patientDoctorMap.keySet().iterator(); i.hasNext();){
             //String j = i.next();
             //if(patientDoctorMap.containsValue(docID))            
                //System.out.println(patientsMap.get(j).getLastName());
          }
       }
    }

  2. #2
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Je pense que tu fais une erreur de conception dans ta table des patients vers les docteurs.

    Tu dis : private HashMap<String,Integer> patientDoctorMap;

    Avec ça, tu ne peux associer qu'un seul numéro de docteur. Si tu en affectes un autre, tu perds l'ancien. Lorsque tu fais, dans ta méthode assignPatientToDoctor, patientDoctorMap.put(ssn, docID);, cela revient à effacer l'ancienne valeur associée à la clef ssn, et lui donner la nouvelle valeur docID.

    Pour t'en sortir, je pense qu'il faut que ta patientDoctorMap soit déclarée de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    private HashMap<String, ArrayList<Integer>> patientDoctorMap;
    Et puis modifier ton code pour ajouter à la liste le nouveau patient du docteur, etc.

  3. #3
    Membre expérimenté Avatar de @ldehan
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 215
    Par défaut
    Citation Envoyé par spekal
    Je pense que tu fais une erreur de conception dans ta table des patients vers les docteurs.

    Tu dis : private HashMap<String,Integer> patientDoctorMap;

    Avec ça, tu ne peux associer qu'un seul numéro de docteur. Si tu en affectes un autre, tu perds l'ancien. Lorsque tu fais, dans ta méthode assignPatientToDoctor, patientDoctorMap.put(ssn, docID);, cela revient à effacer l'ancienne valeur associée à la clef ssn, et lui donner la nouvelle valeur docID.
    Non car il est préciser que chaque patient en peut avoir qu'un seul et unique medecin, donc ca marche

  4. #4
    Membre chevronné Avatar de spekal
    Inscrit en
    Mai 2005
    Messages
    502
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 502
    Par défaut
    Arg, effectivement. Bon, je passe mon tour

  5. #5
    Membre expérimenté Avatar de @ldehan
    Profil pro
    Développeur Java
    Inscrit en
    Mars 2004
    Messages
    215
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2004
    Messages : 215
    Par défaut
    Pour ton parcours, utilise entrySet plutot que keySet,

    Ca te renvoi un set de Map.Entry qui est l'association clé-valeur

    Ca te permet d'itérer et d'avoir toujours la relation

  6. #6
    Membre confirmé
    Inscrit en
    Août 2005
    Messages
    49
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 49
    Par défaut
    Citation Envoyé par @ldehan
    Pour ton parcours, utilise entrySet plutot que keySet,

    Ca te renvoi un set de Map.Entry qui est l'association clé-valeur

    Ca te permet d'itérer et d'avoir toujours la relation
    Merci pour ta méthode, elle fonctionne bien (quelle puissance). Dommage que je ne l'aie pas trouvée plus tôt dans la doc.

    Merci pour le tuyau, je passe en résolu.

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

Discussions similaires

  1. [WD11]Problème de parcours d'arbre
    Par fabpeden dans le forum WinDev
    Réponses: 1
    Dernier message: 17/04/2007, 09h46
  2. Probléme de parcour d'une table
    Par rootdaoud dans le forum Langage
    Réponses: 3
    Dernier message: 25/12/2006, 13h24
  3. Réponses: 9
    Dernier message: 12/06/2006, 09h59
  4. Problème de parcours des champs dans l'ordre.
    Par jyms2006 dans le forum Access
    Réponses: 1
    Dernier message: 19/04/2006, 11h08
  5. [JSTL] Problème de parcours d'arbre en XML
    Par slashmax dans le forum Taglibs
    Réponses: 1
    Dernier message: 04/12/2005, 17h13

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