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 :

Utilisation de maps


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 95
    Par défaut Utilisation de maps
    Bonjour, à tous,

    Je bute sur un problème relativement simple.

    Voici 2 maps (on peut changer la nature de la map ci c'est ça qui pose problème). Ces 2 maps ont en commun leur clé, à savoir un truc appelé IdAtik. IdAtik et NumCo se trouvent physiquement dans une tableA, IdAtik et NomFichier dans une table B.
    L'information IdAtik est effectivement répétée dans 2 tables différentes, et c'est voulu.
    Ce que j'essaie d'obtenir, c'est une nouvelle map avec comme clé le NomFichier et comme valeur associée NumCo, de manière à ce que je puisse ensuite associer à un nom de fichier un NumCo.

    Voici où j'en suis dans le code :

    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
    44
    45
    46
    47
    48
    49
    50
    51
     
    public Map constituerMapIdAtikEtNumCo()
        {
     
            List<Document> listeDocument = editionserviceso.rechercherListeDocument();
     
            Map<String, String> laMap = new HashMap();
     
            for (Iterator<Document> iterator = listeDocument.iterator(); iterator.hasNext();)
            {
                Document document = (Document) iterator.next();
                laMap.put(document.getIdAtik(), document.getNumCo());
            }
            return laMap;
        }
     
        public Map constituerMapIdAtikEtNomFichier(Map mapIdAtikEtNumCo)
        {
            Map<String, String> laNouvelleMap = new HashMap();
     
            List<DocumentB> listDocB =
                documentserviceso.rechercherListeDocumentParIdAtik(mapIdAtikEtNumCo.values());
     
            for (Iterator<DocumentB> iterator = listDocB.iterator(); iterator.hasNext();)
            {
                DocumentB documentB = (DocumentB) iterator.next();
                laNouvelleMap.put(documentB.getIdAtik(), documentB.getNom());
            }
     
            return laNouvelleMap;
        }
     
        public Map constituerMapNomFichierEtNumCo(Map mapIdAtikEtNumCo, Map mapIdAtikEtNomFichier)
        {
            Map<String, String> laMapSouhaitee = new HashMap();
     
            if (mapIdAtikEtNumCo.size() == mapIdAtikEtNomFichier.size())
            {
                if (mapCodiqueEtId.containsKey(mapIdEtNom.keySet()))
                {
                    //code xxxx impossible d'accéder aux valeurs			  //souhaitées
                }
     
            }
            else
            {
                System.out.println("Les tailles de map ne sont pas identiques ; appariement impossible");
            }
     
            return laMapSouhaitee;
        }

    Sauf que je n'y arrive pas...et que je pense que c'est lié à l'utilisation de maps, qui ne doivent pas être faites pour ça....

    Si vous avez une piste de réflexion, je je suis preneur.
    Je vous remercie.
    Thomas

  2. #2
    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,



    J'aurais deux petites remarques avant de commencer, en plus de l'indentation bizarre pour du Java :
    • Tu utilises les Generics de manière partielle. C'est assez étrange.
      Il serait préférable de tout typer correctement.
    • Tu te fais chier avec les Iterator et même des casts inutiles, alors que tu pourrais utiliser le for étendus


    Bref déjà tes deux premières méthodes pourrait plutôt ressembler à ceci :
    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
        public Map<String, String> constituerMapIdAtikEtNumCo()
        {
     
            Map<String, String> laMap = new HashMap<String, String>();
     
            for (Document document : editionserviceso.rechercherListeDocument())
            {
                laMap.put(document.getIdAtik(), document.getNumCo());
            }
            return laMap;
        }
     
        public Map<String, String> constituerMapIdAtikEtNomFichier(Map<String, String> mapIdAtikEtNumCo)
        {
            Map<String, String> laNouvelleMap = new HashMap<String, String>();
     
            for (DocumentB documentB : documentserviceso.rechercherListeDocumentParIdAtik(mapIdAtikEtNumCo.values()))
            {
                laNouvelleMap.put(documentB.getIdAtik(), documentB.getNom());
            }
            return laNouvelleMap;
        }

    Ensuite si j'ai bien compris tu as deux Map comme ceci :
    • IdAtik -> NumCo
    • IdAtic -> Nom

    Et tu voudrais avoir directement ceci :
    • NumCo -> Nom

    Si c'est bien cela, ceci devrait suffire (éventuellement en vérifiant la présence des valeurs) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
        public Map<String, String> constituerMapNomFichierEtNumCo(Map<String, String> mapIdAtikEtNumCo, Map<String, String> mapIdAtikEtNomFichier)
        {
            Map<String, String> laMapSouhaitee = new HashMap<String, String>();
     
            for (String idAtic : mapIdAtikEtNumCo.keySet())
            {
                laMapSouhaitee.put( mapIdAtikEtNumCo.get(idAtic), mapIdAtikEtNomFichier.get(idAtic));
            }
            return laMapSouhaitee;
        }

    a++

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Juillet 2008
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Juillet 2008
    Messages : 95
    Par défaut
    Oui, tu avais raison.
    Pardon pour le délai de réponse, j'ai eu quelques soucis.

    Merci pour ton aide précieuse.

    Je clos la question.

    Thomas

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

Discussions similaires

  1. SQLQuery utiliser les mappings pour le résultat
    Par Invité dans le forum Hibernate
    Réponses: 1
    Dernier message: 05/06/2008, 15h08
  2. Réponses: 1
    Dernier message: 25/02/2008, 18h43
  3. De l'utilisation des map et des pair
    Par dedesite dans le forum SL & STL
    Réponses: 5
    Dernier message: 13/11/2007, 22h37
  4. Jointure de type n à n en utilisant le mapping
    Par touff5 dans le forum Zend_Db
    Réponses: 3
    Dernier message: 05/06/2007, 12h56
  5. Réponses: 3
    Dernier message: 03/05/2006, 15h08

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