Scala并行集合map操作后原列表未更新问题咨询
问题原因与修复方案
核心问题
Scala里的map(包括并行集合的map)是纯函数式操作,它不会修改原集合,而是返回一个包含转换后元素的新集合。你的代码里只调用了map但没接收返回的新集合,所以原集合完全没变化,打印的还是初始值。
修复后的代码
import scala.collection.parallel.CollectionConverters._ object parallelpro1 extends App{ val list = (1 to 100).toList // 接收map返回的新并行集合,按需转回普通List打印 val modifiedList = list.par.map(_ + 42).toList println(modifiedList) val lastNames = List("Smith","Jones","Frankenstein","Bach","Jackson","Rodin").par // 接收转换后的新集合 val upperCaseLastNames = lastNames.map(_.toUpperCase()) println(upperCaseLastNames) }
关键说明
- 不管是普通集合还是并行集合,
map、filter这类操作都不会改变原集合,必须把返回的新集合赋值给变量才能使用转换后的结果。 - 如果不需要保留并行特性,可以用
.toList或.toSeq把并行集合转回普通集合;不转也能直接打印并行集合,输出结果一致。
内容的提问来源于stack exchange,提问作者Prashant Chaudhary
相关产品推荐
相关产品推荐

