Как организовать параллельные коллекции scala в порядке вставки? - PullRequest
0 голосов
/ 29 апреля 2019

Рассмотрим приведенный ниже пример:

object Test {
def main(args: Array[String]): Unit = {
  val vec = Vector(1,2,3,4,5,6)
  val x = vec.map(myFunc(_))
  x.foreach{println}

  val par = vec.par
  val parx = par.map(myFunc(_))
  parx.foreach{println}
}

def myFunc(a:Int) : Int  = {
 return a*a
 }
}

когда я печатаю x, он следует порядку вставки, а parx - случайному порядку. Как сохранить порядок ввода здесь? В этом примере я использую Vector, но это происходит и в других коллекциях, таких как List.

1 Ответ

5 голосов
/ 29 апреля 2019

parx - это параллельная коллекция, поэтому все операции над ней выполняются параллельно, включая foreach.Поэтому все операции println выполняются параллельно, и вы не можете контролировать порядок их выполнения.

Если вы хотите вернуться к последовательной коллекции, вызовите .seq для коллекции.

parx.seq.foreach(println)
...