如何遍历类型为<string,any>的MultiValueMap,其中<any>可以是另一个MultiValueMap,依此类推

时间:2016-09-26 02:22:54

标签: scala hashmap iterator multivalue

我想迭代MultiValueMap类型<String,Any>,其中Any可以是MultiValueMap类型的另一个<String,Any>,而Any可以是另一个MultiValeMap,依此类推。我的代码是只提取地图的第一级: - (“结果”变量是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));
    }
}

1 个答案:

答案 0 :(得分: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)
相关问题