The easiest way to convert a Java Collection to a Scala equivalent is using JavaConversions, since Scala 2.8.これらの暗黙のdefは、含まれているJava Collectionのラッパーを返します。JavaコレクションからScala並列コレクションを作成する方法
Scala 2.9では、並列処理が導入されました。この処理では、コレクションに対する操作を並行して実行し、結果を後で収集できます。
myCollection.par
しかしJavaConversionsを使用してJavaコレクションから変換コレクションに「パー」を使用してに問題があります。これは、簡単に並列一つに既存のコレクションを変換するのと同じくらい簡単で、実装されています。ある、このようなリスト、キューやストリームなど
その他のコレクション、:Parallel Collection Conversionsで説明したように、本質的に連続的なコレクションは、すべての値を評価し、新しい並列コレクションに追加することによって、新しい並列コレクションに「強制」されています本質的には、 の順に要素がアクセスされなければならないという意味で順次である。 。これらのコレクションは、要素を同様の並列コレクションにコピーすることによって、パラレルバリアント に変換されます。 の例では、機能リストは、パラレルベクトルである標準不変の 並列シーケンスに変換されます。
これは、元のJavaコレクションを遅延評価しようとすると問題が発生します。たとえば、Java Iterableだけが返され、後でScala Iterableに変換された場合、Iterableの内容が熱心にアクセスされることを保証するものではありません。 したがって、各要素を評価するコストを負担することなく、Javaコレクションから並列コレクションを作成する必要はありますか?これはパラレルコレクションを使って並行して実行し、提供される最初のn個の結果をうまく '取る'ことによって回避しようとするこのコストです。
Parallel Collection Conversionsによれば、一定の時間を費やす一連のコレクションタイプがありますが、JavaConversionsでこれらのタイプを作成できる保証はありません(例: 'Set'それは 'HashSet'ですか?)。
後者としてJavaConversionsではなくJavaConvertersを使用することをお勧めします。そこでは、.asScala.toList.parのようなことができるはずです。 –