The easiest way to convert a Java Collection to a Scala equivalent is using JavaConversions, since Scala 2.8.. Te niejawne defs zwracają opakowania dla zawartej kolekcji Java.Tworzenie równoległej kolekcji Scala z kolekcji Java
Scala 2.9 wprowadziła kolekcje równoległe, w których operacje na kolekcji mogą być wykonywane równolegle, a wynik zbierany później. Można to łatwo wdrożony, przekształcając istniejącą kolekcję do równoległego jeden jest tak proste, jak:
myCollection.par
Ale jest problem z użyciem „par” na zbiorach konwertowane z kolekcji Java z wykorzystaniem JavaConversions. Jak opisano w Parallel Collection Conversions nieodłącznie zbiory sekwencyjne są „wymuszone” do nowego zbioru równoległym oceny wszystkich wartości, dodając je do nowego zbioru równolegle:
innych kolekcji, takich jak listy, kolejki lub strumieni są z natury sekwencyjny w tym sensie, że elementy muszą być dostępne po drugim po . Kolekcje te są konwertowane na ich równoległe warianty przez skopiowanie elementów do podobnej kolekcji równoległej. Dla przykładu lista funkcjonalna jest konwertowana na standardową niezmienną równoległą sekwencję, która jest równoległym wektorem.
Powoduje to problemy, gdy oryginalna kolekcja Java ma być leniwie oceniana. Na przykład, jeśli tylko Iterowalna Java jest zwracana, później przekształcona w Scala Iterable, nie ma gwarancji, że zawartość Iterable ma być dostępna z zapałem lub nie. Jak zatem utworzyć kolekcję równoległą z kolekcji Java bez konieczności ponoszenia kosztów związanych z oceną każdego elementu? To jest ten koszt, którego próbuję uniknąć, używając kolekcji równoległej, aby wykonać je równolegle i mam nadzieję, że "wezmę" pierwsze n wyników, które są oferowane.
Zgodnie z istnieje szereg typów kolekcji, które kosztują stały czas, ale nie wydaje się, aby można było uzyskać gwarancję, że typy te można utworzyć za pomocą JavaConversions (np. Można utworzyć zestaw "Set", ale czy jest to "HashSet"?).
Należy zauważyć, że lepszym pomysłem byłoby użycie JavaConverters zamiast JavaConversions jako tych ostatnich, ponieważ tam można byłoby zrobić coś takiego jak .asScala.toList.par. –