2016-09-26 11 views
0

我想遍歷<String,Any>類型的MultiValueMap凡可<String,Any>類型的另一個MultiValueMap和任何可以是另一個MultiValeMap等。我的代碼是僅提取圖的第一級別: - (「結果」變量是MultiValueMap如何循環MultiValueMap <String,Any>類型:其中,<Any>可以是另一個MultiValueMap等

val entrySet = result.entrySet(); 
val it = entrySet.iterator(); 
//System.out.println(" Object key Object value"); 
while (it.hasNext()) { 
    val mapEntry= it.next().asInstanceOf[java.util.Map.Entry[String,Any]]; 
    val list = (result.get(mapEntry.getKey()).asInstanceOf[List[String]]) 
    for (j <- 0 to list.size - 1) { 
     //mapEntry.setValue("dhjgdj") 
     System.out.println("\t" + mapEntry.getKey() + "\t " + list.get(j)); 
    } 
} 

回答

2

一種方法是收集所有的元件(鍵 - >值對),然後轉累積到一個迭代器的集合。

def toItr(m: Map[String,_]): Iterator[(String,_)] = 
    m.foldLeft(Vector.empty[(String,_)]){ 
    case (acc, (k, v: Map[String,_])) => acC++ toItr(v).toVector 
    case (acc, x) => acc :+ x 
    }.toIterator 

toItr(Map("a"->1, "b"->3, "c"->Map("x"->11, "y"->22))) 
// result: Iterator[Tuple2[String, _]] = non-empty iterator 
// contents: (a,1), (b,3), (x,11), (y,22) 
+0

感謝您的回覆jwvh。我想在saxParsing一個XML期間應用這個。所以在每一步我都要迭代到我正在解析的當前元素的根節點,並將其中的子元素添加到MultiValueMap中。那麼每次MultiValueMap更新時都必須創建一個迭代器? – david419

+0

如果我正確理解你的問題,聽起來好像答案是肯定的,每個子'map' /'Iterator'都需要一個新的'Iterator'。 – jwvh

+0

好的謝謝。我會嘗試一下,接受一次。 – david419

相關問題