从scala并行集合到常规集合的转换

从scala并行集合到常规集合的转换,scala,parallel-processing,scala-collections,Scala,Parallel Processing,Scala Collections,我正在尝试从平行集合转换回常规贴图。根据api,如果我在任何适当定义的并行集合上调用toMap,它应该返回一个标准映射,但它返回的是一个平坦的iterables集合上的ParMap 我有一个 val task: Stream[Future[Iterable[Tuple2[String, String]]]] 我从中得到: val res: ParSeq[Iterable[Tuple2[String, String]]] = tasks.par.map(f => f.apply()) 最

我正在尝试从平行集合转换回常规贴图。根据api,如果我在任何适当定义的并行集合上调用toMap,它应该返回一个标准映射,但它返回的是一个平坦的iterables集合上的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

当您通过
.par
明确地从顺序收集转换为并行收集时,您可以通过
返回顺序收集。由于集合和映射具有并行实现,
toMap
toSet
调用将集合留在当前域中

reduce
的示例之所以有效,是因为它减少了集合(外部的
ParSeq
消失,留下内部的(顺序的)
Iterable[Tuple2[…]