Самый простой способ преобразовать коллекцию Java в эквивалент Scala - это использовать JavaConversions, начиная с версии Scala 2.8.. Эти неявные defs возвращают оболочки для содержащейся коллекции Java.
В Scala 2.9 появились параллельные коллекции, в которых операции с коллекцией могут выполняться параллельно, а результат собираться позже. Это легко реализовать, преобразовать существующую коллекцию в параллельную так же просто, как:
myCollection.par
Но есть проблема с использованием par в коллекциях, преобразованных из коллекций Java с помощью JavaConversions. Как описано в Параллельные преобразования коллекций, по своей сути последовательные коллекции - это ' принудительно 'в новую параллельную коллекцию, оценив все значения и добавив их в новую параллельную коллекцию:
Другие коллекции, такие как списки, очереди или потоки, по своей сути последовательны в том смысле, что к элементам необходимо обращаться один за другим. Эти коллекции преобразуются в их параллельные варианты путем копирования элементов в аналогичную параллельную коллекцию. Например, функциональный список преобразуется в стандартную неизменяемую параллельную последовательность, которая представляет собой параллельный вектор.
Это вызывает проблемы, когда исходная коллекция Java предназначена для ленивой оценки. Например, если возвращается только Java Iterable, позже преобразованный в Scala Iterable, нет гарантии, что содержимое Iterable предназначено для быстрого доступа или нет. Итак, как следует создать параллельную коллекцию из коллекции Java, не поддерживая затраты на оценку каждого элемента? Я пытаюсь избежать этой стоимости, используя параллельную коллекцию для их параллельного и, надеюсь, выполнения » возьмите первые n предложенных результатов.
Согласно Параллельные преобразования коллекций, существует ряд типов коллекций это требует постоянного времени, но, похоже, нет способа получить гарантию того, что эти типы могут быть созданы с помощью JavaConversions (например, «Set» может быть создан, но является ли это «HashSet»?).