scala .seq vs .toSeq

时间:2014-10-10 18:17:56

标签: scala collections seq

在Scala文档中,集合同时定义了.seq和.toSeq方法。它们之间有什么区别,为什么它们都存在?我无法通过阅读Scala集合文档来解决这个问题。

2 个答案:

答案 0 :(得分:23)

假设我有并行收藏:

val myParList = List(1, 2, 3, 4).par

现在,此集合上的map等操作将并行运行。通常这很好,因为它意味着事情变得更快,但有时你确实需要对元素执行某种副作用操作,然后并行运行会导致问题:

scala> myParList.foreach(println)
1
4
3
2

.seq允许您通过要求操作按顺序运行(不复制集合的内容)来解决此问题:

scala> myParList.seq.foreach(println)
1
2
3
4

实际上它只是撤消.par.toSeq并未提供相同的保证,而且通常它只适用于GenTraversableOnce已经Seq的子类。

答案 1 :(得分:1)

repl中的实验显示出一个区别:

scala> val l = List(1,2,3)
l: List[Int] = List(1, 2, 3)

scala> l.seq
res2: scala.collection.immutable.LinearSeq[Int] = List(1, 2, 3)

scala> l.toSeq
res3: scala.collection.immutable.Seq[Int] = List(1, 2, 3)