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 :

Itération sur une Map


Sujet :

Collection et Stream Java

  1. #1
    Inactif  
    Inscrit en
    Mai 2008
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 135
    Points : 128
    Points
    128
    Par défaut Itération sur une Map
    Bonjour,

    J'ai une Map sous cette forme :

    Map<Departement, List<City>>

    Et j'aimerais itérer cette fois sur les City.

    alors j'arrive à afficher les "Departement", mais pas les Citys.

    Mon Code : (Ma Map est bien alimentée je le vois en mode Débugg et elle s'appelle listAll)



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    for (Iterator<Departement> itDepartement = listAll.keySet().iterator() ; itDepartement.hasNext() ; ){
        Object o = itDepartement.next();
        if (o != null){
        	Departement departementDataModel = (itDepartement)o;
     
        	System.out.println(departementDataModel.getCode());
     
        	// Ici J'aimerais itérer ensuite sut toutes les ville concerné par le département,
           // C'est a dire, le deuxieme champs de ma Map
       }

    Merci

  2. #2
    Expert éminent sénior
    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
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    A moins de vouloir supprimer des éléments pendant le parcours il est préférable de ne pas utiliser directement l'Iterator et de passer par un for étendus bien plus simple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	// On parcours les clefs :
    	for (Departement departementDataModel : listAll.keySet()) {
    		if (departementDataModel!=null) { // Tu as vraiment des valeurs null dans ta Map ?
    			System.out.println(departementDataModel.getCode());
    		}
    	}

    Si on veut parcourir uniquement les valeurs on peut utiliser values() (attention les données ne sont pas forcément ordonné) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	// On parcours les valeurs :
    	for (List<City> listCity : listAll.values()) {
    		// Puis comme on a une liste on peut vouloir la parcourir elle aussi :
    		for (City city : listCity) {
    			System.out.println(city);
    		}
    	}
    Enfin on peut utiliser entrySet() pour parcourir les couples clefs/valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    	// On parcours les couples clefs/valeurs :
    	for (Map.Entry<Departement, List<City>> entry : listAll.entrySet()) {
    		Departement departement = entry.getKey();
    		List<City> listCity = entry.getValue();
     
    		System.out.println(departement.getCode());
    		for (City city : listCity) {
    			System.out.println("\t"+city);
    		}
    	}
    a++

  3. #3
    Inactif  
    Inscrit en
    Mai 2008
    Messages
    135
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 135
    Points : 128
    Points
    128
    Par défaut
    J'ai une erreur concernant ta dernière méthode :

    Type mismatch: cannot convert from element type Object to Map.
    Entry<Departement,List<City>>


    est préférable de ne pas utiliser directement l'Iterator
    Pourquoi ?

  4. #4
    Membre régulier
    Homme Profil pro
    Nom
    Inscrit en
    Juin 2006
    Messages
    90
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Nom

    Informations forums :
    Inscription : Juin 2006
    Messages : 90
    Points : 89
    Points
    89
    Par défaut
    Je te conseille vivement d'utiliser les googleCollection.
    Ensuite, le fait d'utiliser une map, avec une liste comme "value", fait qu'il vaut largement mieux utiliser une "multimap" qui est fait pour ca!

    Ainsi:

    Map<Obj1, Collection<Obj2>> <==> MultiMap<Obl1, Obj2>

    ca va te rendre d'enormes services.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Multimap<Departement, City> listAll = new HashMultimap<Departement, City>();
            for (Departement departement : listAll.keySet()) {
                System.out.println("Ceci est un departement: "+ departement.getCode());
                for (City city : listAll.get(departement)) {
                    city.getCode();
                }
            }

Discussions similaires

  1. Erreur sur une map
    Par Nyko17 dans le forum C++
    Réponses: 0
    Dernier message: 24/05/2008, 23h13
  2. Itération sur une liste en JSF?
    Par toutoune60 dans le forum JSF
    Réponses: 2
    Dernier message: 26/12/2007, 10h43
  3. Réponses: 3
    Dernier message: 06/11/2007, 12h18
  4. Criteria sur une Map
    Par sup dans le forum Hibernate
    Réponses: 1
    Dernier message: 20/09/2007, 13h08
  5. @OneToMany sur une Map<Product,Integer>
    Par ®om dans le forum JPA
    Réponses: 5
    Dernier message: 25/02/2007, 20h13

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