2016-11-09 39 views
0

我有它返回了包含HashMap的HashMap中的方法印刷HashMap中包含HashMap:Map.Entry的或java8

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

我嘗試使用下面的代碼

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); 
     } 

打印外的HashMap我想遍歷內部地圖。那裏的entryset變量是什麼(代碼中是???)。

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); 
      }} 

我的打印hashmaps的邏輯是否正確?還是有更好的方法來做到這一點?

+0

「是我的邏輯用於打印包含HashMap正確的嗎?」不,它不是。當你迭代內部散列表時,你顯然需要另一種類型的'入口'(因爲它包含另一種類型的數據)。 – talex

回答

5

這將是entry.getValue().entrySet() 所以

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

那麼你可以使用

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

值得一提的是,這也可以做到用java 8流和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)這需要一個lambda表達式,其有兩個輸入端,即密鑰(字符串)和值(HashMap中)

V.forEach((X,Y)->{由於這是施加在內側(V :通過以前的foreach獲取)hashmap因此Key和Value都是字符串

皮毛的引用療法閱讀: