2013-12-15 67 views
0

我有以下代碼:如何通過地圖與地圖迭代在Java中

/* 
if inputDetailsMap has values like: 
String  String 
key1  value1 
key2  value2 
key3  value3 
key4  value4 
key5  value5 
so on..... 
*/ 

public void inputData(Map<String,String> inputDetailsMap, String fileName){ 
    //a for loop to run 
      String value = inputDetailsMap.get("key" + i); // i value comes from the for loop 
      //i am doing something with the value. 
    //end of for loop 
} 

上面的代碼工作得很好,如果我想通過地圖迭代。 但現在我有這樣的事情。

/* 
inputDetailsMap has values like: 
int   String  String 
1   key1  value1 
      key2  value2 
      key3  value3 
      key4  value4 
      key5  value5 
2   key1  value1 
      key2  value2 
      key3  value3 
      key4  value4 
      key5  value5 
so on..... 
*/ 
public void inputData(Map<Integer,Map<String,String>> inputDetailsMap, String fileName){ 
     //how to iterate and get the value using inputDetailsMap.get() like the above code?? 
} 

我想遍歷Map中的Map並獲取關鍵字和值。 我想獲取key1,value1,key2,value2,key3,value3等的值。 那麼我該如何去做呢?

+0

你爲什麼不使用一個列表,而不是一個地圖呢?如果鍵從1到N,則可以簡單地使用索引(將從0到N-1) –

回答

1

您可以使用:

String value = inputDetailsMap.get(1).get("key" + i); 

首先得到將得到正確的Map<String, String>(鑰匙1或2)。

二get會得到正確的值(鍵1,鍵2 ...)

-1

試試這個

public void inputData(Map<int,Map<String,String>> inputDetailsMap, String fileName){ 
    System.out.println(inputDetailsMap.get(fileName)); 
} 
0
public void inputData(Map<Integer,Map<String,String>> inputDetailsMap) { 
    for (Map.Entry<Integer, Map<String,String> entry : inputDetailsMap.entrySet()) {    
     Map<String, String>innerMap = entry.getValue() 
     for (Map.Entry<String, String> keyPair : innerMap.entrySet()) { 
      String key = keyPair.getKey(); 
      String value = keyPair.getValue(); 
      // do something with value 
     } 
    } 
} 
+0

由於Type參數不能是原始類型,因此不會編譯。 –

+0

已將int更改爲Integer – user3103692

+0

感謝user3103692 您的代碼也能正常工作。 –

0

您可能會更好看一些像番石榴的Multimap之:

http://tomjefferys.blogspot.co.uk/2011/09/multimaps-google-guava.html

http://guava-libraries.googlecode.com/svn-history/r14/trunk/javadoc/com/google/common/collect/Multimap.html

但是,如果沒有使用:

import java.util.HashMap; 
import java.util.Map; 

public class MapInMap { 

public static void main(String[] args){ 

    for (Integer index: outerMap.keySet()){ 
     for (String innerIndex: outerMap.get(index).keySet()){ 
      System.out.println(String.format("%s :: %s :: %s", index, innerIndex, outerMap.get(index).get(innerIndex))); 
     } 
    } 

} 

/* 
inputDetailsMap has values like: 
int   String  String 
1   key1  value1 
      key2  value2 
      key3  value3 
      key4  value4 
      key5  value5 
2   key1  value1 
      key2  value2 
      key3  value3 
      key4  value4 
      key5  value5 
so on..... 
*/ 
static Map<String, String> innerMap1 = new HashMap<String, String>(){{ 
    put("key1", "value1"); 
    put("key2", "value2"); 
    put("key3", "value3"); 
    put("key4", "value4"); 
    put("key5", "value5"); 
}}; 
static Map<String, String> innerMap2 = new HashMap<String, String>(){{ 
    put("key1", "value1"); 
    put("key2", "value2"); 
    put("key3", "value3"); 
    put("key4", "value4"); 
    put("key5", "value5"); 
}}; 

static Map<Integer, Map<String,String>> outerMap = new HashMap<Integer, Map<String,String>>(){{ 
    put(1, innerMap1); 
    put(2, innerMap2); 
}}; 
}