如何按插入顺序排列 Scala 并行集合?

How to arrange scala parallel collections in insertion order?

考虑以下示例:

object Test {
def main(args: Array[String]): Unit = {
  val vec = Vector(1,2,3,4,5,6)
  val x = vec.map(myFunc(_))
  x.foreach{println}

  val par = vec.par
  val parx = par.map(myFunc(_))
  parx.foreach{println}
}

def myFunc(a:Int) : Int  = {
 return a*a
 }
}

当我打印 x 时,它遵循插入顺序,而 parx 遵循随机顺序。如何在此处保留插入顺序?我在此示例中使用 Vector,但它也发生在其他集合中,例如 List

parx 是一个并行集合,因此对它的所有操作都是并行完成的,包括 foreach。所以所有的println操作都是并行执行的,你无法控制它们完成的顺序。

如果您想返回顺序集合,请对该集合调用 .seq

parx.seq.foreach(println)