Будут ли Scala параллельные коллекции гарантировать заказ?
Если у меня есть это:
val a = Array(...)
и я пишу
a.par.map(e => someFunc(e))
Будет ли полученная коллекция быть в том же порядке, что и непараллельный набор?
Ответ 1
Да, но сама функция выполняется без какого-либо определенного порядка.
List(1,2,3).par foreach print // could print out 213
Ответ 2
Параллельные коллекции сохраняют все контракты своих непараллельных эквивалентов.
В коллекциях, в которых операция a map сохраняет порядок, например List, порядок будет сохранен также параллельным map. В коллекциях, в которых map не сохраняет порядок, например Set, порядок не сохраняется в параллельной версии.
С неупорядоченными коллекциями нет гарантии, что результат параллельной операции даже будет иметь тот же порядок обхода, что и его непараллельный эквивалент.