2012-10-30 129 views
2

我有一個嵌套的樹形圖,需要檢查每一個內部地圖,如果它具有一定的關鍵。例如:每個循環嵌套的樹狀圖

TreeMap<String,TreeMap<String,Integer>> map 

for each loop { 
//check if the inner map has the key in it 
} 

我該如何格式化for-each循環? 謝謝!

回答

2

可以遍歷兩個嵌套的地圖有兩個嵌套「的foreach」循環,像這樣:

for (Map.Entry<String,TreeMap<String,Integer>> entry1 : map.entrySet()) { 
    Map<String,Integer> innerMap = entry1.getValue(); 
    if (innerMap.containsKey("my-key")) { 
     System.out.println("Map at key "+entry1.getKey()+" contains 'my-key'"); 
    } 
} 
+1

他想檢查內部映射,而不是迭代它。 – Brian

+0

@布賴恩啊,你是對的,我編輯瞭解決這個問題的答案。 – dasblinkenlight

+0

很酷,謝謝+1 – Brian

4

您可以使用地圖的entrySet()通過條目在地圖迭代如下:

for (Map.Entry<String, TreeMap<String, Integer>> entry : map.entrySet()) 
{ 
    if (entry.getValue().containsKey(key)) { 
     return entry.getValue().get(key); 
    } 
} 

或者你可以使用values()收集的地圖通過條目進行迭代:

for (TreeMap<String, Integer> value : map.values()) 
{ 
    if (value.containsKey(key)) { 
     return value().get(key); 
    } 
} 
1

從外部映射獲取值,迭代每個內部的元素。中的每個元素,這是一個TreeMap<String,Integer>,使用containsKey以檢查地圖元素包含所需的鍵。

TreeMap<String,TreeMap<String,Integer>> map = 
            new TreeMap<String, TreeMap<String,Integer>>(); 
    for(TreeMap<String,Integer> mapElement: map.values()) { 
     //check if the inner map has the key in it 
     if(mapElement.containsKey("searchKey")){ 
      System.out.println("Match key found in this map element"); 
     } 
    } 
0

或者,你可以使用番石榴TreeBasedTable,有很多方便的方法來處理您的嵌套的數據結構。

TreeBasedTable<String, String, Integer> tb = TreeBasedTable.create(); 
tb.put("rowA", "colA", 1); 
tb.put("rowB", "colB", 2); 

tb.containsRow("rowA"); 
...