2017-05-11 34 views
-1

我有以下多重映射:如何有效地迭代Multimap?

Multimap<String,Multimap<String,Integer>> map = ArrayListMultimap.create(); 

我需要重複它,但我堅持。

我應該如何迭代它?

+0

迭代如何?你想達到什麼目的?你有什麼嘗試,沒有奏效? – ytg

回答

0

看起來您正在使用google guava multimapArrayListMultimap類的create method來創建它。

您可以通過多重映射迭代和你內心的多重映射這樣的:

package com.test.java; 

import com.google.common.collect.ArrayListMultimap; 
import com.google.common.collect.Multimap; 

public class Main { 

    @SuppressWarnings("unchecked") 
    public static void main(String[] args) { 

     Multimap<String, Multimap<String,Integer>> map = ArrayListMultimap.create(); 

     Multimap<String,Integer> m = ArrayListMultimap.create(); 

     //put some values 
     m.put("value1", 1); 
     m.put("value2", 2); 
     m.put("value3", 3); 

     map.put("one", m); 

     for (Object value1 : map.values()) { 
      for (Object value2 : ((Multimap<String,Integer>)value1).values()) { 
       System.out.println((Integer)value2); 
      } 
     } 
    } 

} 

輸出:

2 
1 
3 

注:

如果你想有一個確定性迭代訂單,請使用LinkedListMultimap

實施例:

LinkedListMultimap<String, LinkedListMultimap<String,Integer>> map = LinkedListMultimap.create(); 

LinkedListMultimap<String,Integer> m = LinkedListMultimap.create(); 

//put some values 
m.put("value1", 1); 
m.put("value2", 2); 
m.put("value3", 3); 

map.put("one", m); 

for (Object value1 : map.values()) { 
    for (Object value2 : ((LinkedListMultimap<String,Integer>)value1).values()) { 
     System.out.println((Integer)value2); 
    } 
} 

輸出:

1 
2 
3 
+0

謝謝你完美的工作 – crazyforjava

0
Map<String, Multimap<String>> map = multimap.asMap(); 
System.out.println("Multimap as a map"); 

for (Map.Entry<String, Multimap<String>> entry : map.entrySet()) { 
    String key = entry.getKey(); 
    Multimap<String> value = multimap.get("lower"); 
    System.out.println(key + ":" + value); 
} 

請試用一下。

+0

我有一個multimap和它的價值作爲一個更多的multimap將解決上述工作? – crazyforjava

+0

是的,你可以嘗試告訴我。 –

相關問題