18

作为标准语言的一部分,Scala 是否提供了一种执行并行映射操作的方法?

例如,给定:

scala> val a = List((1,2), (3,4), (3,6))
a: List[(Int, Int)] = List((1,2), (3,4), (3,6))

我可以:

scala> a.map(tup => tup._1 + tup._2)
res0: List[Int] = List(3, 7, 9)

但是,据我所知,这会将提供的函数按顺序映射到列表对象上。是否有一种内置方法可以将函数应用于单独线程(或等效线程)中的每个元素,然后将结果收集到结果列表中?

4

2 回答 2

35

如果添加par,那么您将获得一个并行集合,并且对它的操作将被并行处理。要转换回普通集合,请调用toList.

所以你的代码看起来像:

a.par.map(tup => tup._1 + tup._2).toList

或 a.seq获得一个顺序集合(与并行集合相反)。

a.par.map(tup => tup._1 + tup._2).seq

另外,检查文档。

于 2013-11-20T10:10:45.583 回答
8

par拆分您的列表以在多个线程上进行处理。tasksupport然后,您可以通过修改结果的成员来调节线程是如何完成的ParSeq

于 2013-11-20T10:08:50.090 回答