Scala中map和foreach方法的区别?

时间:2013-06-13 06:01:11

标签: scala

当我开始编写Scala时,我确实有一个很大的疑问。我想知道scala中的map方法是如何工作的。它是按顺序处理还是以多线程处理?更重要的是,我想知道为什么map方法比whileforeach更快?

val list = List(1,2,3,45,12)
list.map(x => x)
list.foreach(x => println(x))

1 个答案:

答案 0 :(得分:25)

首先,这两个操作是无限不同的。 map是给定函数A => B的列表转换,而foreach产生Unit,通常用于副作用。

我认为foreach在执行所需的周期方面“更快”,与map相比,后者创建了一个新的集合(在本例中)作为函数的结果。但比较这两者实际上是在比较苹果和橘子。

map只有在调用它的集合是并行集合时才会是并行的。所以在你的例子中:

list.map(x => x)

不是平行的并且是顺序的,但是

list.par.map(x => x)

将是平行的。这种用法显然需要考虑各种警告。同一个并行集合也有foreach方法。