2010-10-22 47 views
1

J'ai un Map<String, Person> (en fait je suis sur un POJO plus complexe, mais la simplifier pour le bien de ma question)Comment puis-je itérer sur une carte de <String, POJO>?

Person ressemble:

class Person 
{ 
    String name; 
    Integer age; 

    //accessors 
} 

Comment puis-je itérer cette carte , l'impression de la clé, le nom de la personne, l'âge de la personne tels que:

System.out.println(String.format("Key : %s Name : %s Age : %s", a, b, c)); 
  • A étant la clé de carte < Chaîne, personne>
  • B étant le nom de Person.getName()
  • C étant l'âge de Person.getAge()

Je peux tirer toutes les valeurs de la carte à l'aide .values ​​() comme détaillé dans le HashMap docs, mais je suis un peu incertain de la façon dont je peux obtenir les clés

Répondre

9

What about entrySet()

HashMap<String, Person> hm = new HashMap<String, Person>(); 

hm.put("A", new Person("p1")); 
hm.put("B", new Person("p2")); 
hm.put("C", new Person("p3")); 
hm.put("D", new Person("p4")); 
hm.put("E", new Person("p5")); 

Set<Map.Entry<String, Person>> set = hm.entrySet(); 

for (Map.Entry<String, Person> me : set) { 
    System.out.println("Key :"+me.getKey() +" Name : "+ me.getValue().getName()+"Age :"+me.getValue().getAge()); 

} 
+0

Fonctionne pour moi, merci :) – Jimmy

1

Vous pouvez utiliser:

  • Map.entrySet() (comme mentionné par org.life.java) ou,
  • Map.keySet() comme dans cet exemple (en fonction de votre code échantillonné)

Exemple:

Map<String, Person> personMap = ..... //assuming it's not null 
Iterator<String> strIter = personMap.keySet().iterator(); 
synchronized (strIter) { 
    while (strIter.hasNext()) { 
     String key = strIter.next(); 
     Person person = personMap.get(key); 

     String a = key; 
     String b = person.getName(); 
     String c = person.getAge().toString(); 
     System.out.println(String.format("Key : %s Name : %s Age : %s", a, b, c)); 

    } 
}