The easiest way to convert a Java Collection to a Scala equivalent is using JavaConversions, since Scala 2.8.創建Scala的並行集合。這些隱式defs返回包含Java Collection的包裝器。如何從Java集合
的Scala 2.9引入平行集合,其中在收集操作可並行執行,其結果後收集。這是很容易實現的,現有的集合轉換成平行的一個是簡單的:
myCollection.par
但有使用「相提並論」上使用JavaConversions Java集合轉換集合的一個問題。正如Parallel Collection Conversions描述,本質上連續集合「逼」到一個新的並行收集通過評估所有的值,並將它們添加到新的並行採集:
其他收藏品,如列表,隊列或流,是固有地是 連續的意思,即必須在 之後訪問另一個元素。通過將這些元素複製到類似的並行集合中,將這些集合轉換爲其並行變體 。例如,一個功能列表被轉換成一個標準的不可變的並行序列,這是一個並行向量。
當原始Java集合打算進行懶惰評估時,會導致問題。例如,如果只返回一個Java Iterable,後來轉換爲Scala Iterable,則不能保證Iterable的內容可以被急切地訪問或不被訪問。 那麼應該如何從Java集合中創建並行集合,而不需要支持評估每個元素的成本呢?這是我試圖避免使用並行集合並行執行它們並希望'採取'提供的前n個結果的成本。
根據Parallel Collection Conversions有一系列的收集類型需要花費不變的時間,但似乎沒有辦法確保這些類型可以由JavaConversions創建(例如,可以創建'Set'但那是一個'HashSet'?)。
請注意,使用JavaConverters而不是JavaConversions作爲後者會更好,在那裏您可以執行類似.asScala.toList.par的操作。 –