Параллельные операции с картами?

Предоставляет ли Scala способ выполнения операций параллельной карты как части стандартного языка?

Например, учитывая:

scala> val a = List((1,2), (3,4), (3,6))
a: List[(Int, Int)] = List((1,2), (3,4), (3,6))

Я могу сделать:

scala> a.map(tup => tup._1 + tup._2)
res0: List[Int] = List(3, 7, 9)

Однако, насколько мне известно, это последовательно сопоставляет предоставленную функцию со списком объектов. Существует ли встроенный способ применения функции к каждому элементу в отдельном потоке (или эквивалентном), а затем результаты собираются в результирующий список?

2 ответа

Решение

Если вы добавите par тогда вы получите параллельный сбор, а операции над ним будут обрабатываться параллельно. Чтобы преобразовать обратно в обычную коллекцию, вызовите toList,

Итак, ваш код будет выглядеть так:

a.par.map(tup => tup._1 + tup._2).toList

Или .seq получить последовательную коллекцию (противоположность параллельной коллекции).

a.par.map(tup => tup._1 + tup._2).seq

Также проверьте документацию.

par разделяет ваш список для обработки по нескольким потокам. Затем вы можете регулировать процесс создания потоков, модифицируя tasksupport член результирующего ParSeq,

Другие вопросы по тегам