我正在尝试将并行集合转换回普通的Map。根据API,如果我在任何适当定义的并行集合上调用toMap,它应该返回一个标准的Map,但它返回的是一个ParMap,其中包含可迭代对象的扁平集合。
我有一个
val task: Stream[Future[Iterable[Tuple2[String, String]]]]
我得到的结果是:
val res: ParSeq[Iterable[Tuple2[String, String]]] = tasks.par.map(f => f.apply())
最终结果:
val finalresult = res.flatten.toMap
不幸的是,finalresult
的类型是 ParMap[String, String]
。
另一方面,如果我这样调用:
tasks.par.map(f => f.apply()).reduce(_++_).toMap
如果函数返回类型是Map[String, String]
,那是为什么?另外(出于好奇),当scala不允许我时,我怎样强制将ParMap
转换为Map
?