【问题标题】:scala .seq vs .toSeqscala .seq 与 .toSeq
【发布时间】:2014-12-05 23:46:27
【问题描述】:

在 Scala 文档中,集合同时定义了 .seq 和 .toSeq 方法。它们之间有什么区别,为什么它们都在那里?我无法通过阅读 Scala 集合文档来弄清楚。

【问题讨论】:

    标签: scala collections seq


    【解决方案1】:

    假设我有一个并行集合:

    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 的子类有用,这些子类还不是Seqs。

    【讨论】:

    • 综上所述,您可以将.toSeq 缩写为.toSequence,将.seq 缩写为.toSequential
    【解决方案2】:

    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)
    

    【讨论】:

    • OP 说他们已经阅读了 API 文档,其中明确指出了返回类型的差异,所以我不确定这是否会有所帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    相关资源
    最近更新 更多