2014-02-20 112 views
0

我正在做一些原型,我需要一個快速的方法來加快一些算法。所以我在看Scala Parallel Collections。沒有進入的,爲什麼我需要使用foreach細節,有人可以闡明光爲什麼下面的崩潰(只是一個例子):斯卡拉並行集合類鑄

List(1,2,3,4).combinations(2).asParIterable.foreach(_ => println("foo")) 

java.lang.ClassCastException: scala.collection.SeqLike$CombinationsItr cannot be 
    cast to scala.collection.parallel.ParIterable 
at scala.collection.parallel.package$$anon$2.asParIterable(package.scala:70) 

(Scala是2.10.3)


或者換句話說:我如何平行化迭代器?

回答

3

你不能並行化一個迭代器;你可以把它變成一個迭代和並行

List(1,2,3,4).combinations(2).toSeq.par.foreach(_ => println("foo")) 

我不知道如果toIterable代替toSeq也能發揮作用。但是,如果您只需要foreach,

iterator.foreach(_ => Future(println("foo"))) 

應該工作。

+0

好的,謝謝你的工作,也'toParArray'。我希望我不需要在內存中保留所有的排列組合(這在我的實際情況中可能很多),但是沒有'OutOfMemoryError'呢...... –