scala.collection.breakOut 与 View

标签 scala scala-collections

This SO answer描述如何 scala.collection.breakOut可用于防止创建浪费的中间集合。例如,这里我们创建一个中间 Seq[(String,String)] :

val m = List("A", "B", "C").map(x => x -> x).toMap

通过使用 breakOut我们可以阻止创建此中间 Seq :
val m: Map[String,String] = List("A", "B", "C").map(x => x -> x)(breakOut)

Views solve the same problem以及懒惰地访问元素:
val m = (List("A", "B", "C").view map (x => x -> x)).toMap

我假设创建 View wrappers 相当便宜,所以我的问题是:有什么真正的理由使用 breakOut超过 View年代?

最佳答案

从 Scala 2.13 开始,这不再是一个问题。 Breakout 已被删除,建议替换 View 。

Scala 2.13 Collections Rework

View 也是 collection.breakOut 的推荐替代品。
例如,

val s: Seq[Int] = ... 
val set: Set[String] = s.map(_.toString)(collection.breakOut)

可以用以下相同的性能特征表示:
val s: Seq[Int] = ... 
val set = s.view.map(_.toString).to(Set)

关于scala.collection.breakOut 与 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21285620/

相关文章:

scala - 如何在scala中实现通用平均函数?

scala - 根据 A 成员将 List[A] 转换为 List[Option[A]]

scala - 在 Scala 中使用部分应用函数有哪些应用/优势?

scala - 命令式 vs 函数式示例

r - 使用 Scala 中的 R 并从 R 中调用 Scala?

scala - 多个 if else 语句从 Scala 中的映射获取非空值

scala - IndexedSeq 和删除多个元素

java - 在模板参数中 Play 2.0 括号

java - 可在 JVM Scala 和 Scala.js 中使用的计时器

scala - Scala 中二维数组的类型不匹配错误