看一下forall方法的实现,这个方法怎么可能是并行的?
def forall(p: A => Boolean): Boolean = {
var result = true
breakable {
for (x <- this)
if (!p(x)) { result = false; break }
}
result
}
正如我所理解的更好的并行化,避免使用var并且更喜欢val。如果我使用forall,这现在应该如何工作?
答案 0 :(得分:2)
您正在查看forall
的非并行版本。
并行版本看起来像这样(由并行集合提供,在本例中为ParIterableLike):
def forall(pred: T => Boolean): Boolean = {
tasksupport.executeAndWaitResult
(new Forall(pred, splitter assign new DefaultSignalling with VolatileAbort))
}
要获得并行集合,请插入.par
,例如:
List.range(1, 10).par.forall(n => n % 2 == 0)
如果您使用像IntelliJ这样的IDE,只需&#34;缩放&#34;进入forall
,您将看到上面的代码。否则,这里是ParIterableLike的来源(感谢@Kigyo分享网址)。