2016-11-09 2 views
0

J'ai une méthode qui retourne à hashmap de hashmapsImpression HashMap de HashMaps: Map.Entry ou java8

HashMap<String, HashMap<String, String>> mapofmaps = abcd(<String>, <Integer>); 

Je suis en train d'imprimer la HashMap externe en utilisant le code suivant

for (Entry<String, HashMap<String, String>> entry : mapofmaps.entrySet()) { 
      String key = entry.getKey(); 
      System.out.println(key); 

     HashMap<String, String> value = entry.getValue(); 
      System.out.println(key + "\t" + value); 
     } 

Je voudrais parcourir la carte intérieure. Quelle serait la variable entryset là (??? dans le code).

for (Entry<String, HashMap<String, String>> entry : mapofmaps.entrySet()) { 
       String key = entry.getKey(); 
       System.out.println(key); 
    for(Entry<String, HashMap<String, String>> entry : ????.entrySet()){ 
      HashMap<String, String> value = entry.getValue(); 
       System.out.println(key + "\t" + value); 
      }} 

Ma logique d'impression des hashmaps est-elle correcte? ou y a-t-il une meilleure façon de le faire?

+0

"est ma logique pour l'impression des hashmaps correcte?" Non ce n'est pas. Lorsque vous parcourez la hashmap interne, vous avez évidemment besoin d'un autre type pour 'entry' (car il contient un autre type de données). – talex

Répondre

5

Il sera entry.getValue().entrySet() si

for(Entry<String, String> innerEntry : entry.getValue().entrySet()){ 

vous pouvez utiliser

String key = innerEntry.getKey(); 
    String value = innerEntry.getValue(); 

Il convient de mentionner que, cela peut aussi être fait en utilisant java 8 Streams et expressions lambda

HashMap<String, HashMap<String, String>> mapofmaps = new HashMap<>(); 

    HashMap<String,String> map1 = new HashMap<>(); 
    map1.put("map1_key1", "map1_value1"); 

    HashMap<String,String> map2 = new HashMap<>(); 
    map2.put("map2_key1", "map2_value1"); 

    mapofmaps.put("map1", map1); 
    mapofmaps.put("map2", map2); 

 // To print the keys and values 
    mapofmaps.forEach((K,V)->{     // mapofmaps entries 
     V.forEach((X,Y)->{      // inner Hashmap enteries 
      System.out.println(X+" "+Y);  // print key and value of inner Hashmap 
     }); 
    }); 

mapofmaps.forEach((K,V): Cela suppose que d'une expression lambda qui prend deux entrées-à-dire la clé (String) et la valeur (HashMap)

V.forEach((X,Y)->{: Comme il est appliqué sur intérieure (V : récupéré à travers foreach précédent) hashmap donc la clé et la valeur seront des chaînes

Référence pour la fourrure lecture ther: