相关疑难解决方法(0)

Scala 中的 LazyList 和 Stream 有什么区别?

我注意到它Stream已被弃用Scala 2.13,他们建议使用LazyList. 他们还说“使用 LazyList(完全懒惰)而不是 Stream(只有一个懒惰的尾巴)”。
它到底是什么意思?他们为什么弃用Stream

scala stream lazylist scala-collections

9
推荐指数
1
解决办法
1520
查看次数

Scala 2.13 视图与 LazyList

我正在将一个项目从 Scala 2.12.1 迁移到 2.13.6,发现SeqView#flatMap现在返回一个View,它没有distinct方法。因此,我有一段代码不再编译:

val nodes = debts.view
      .flatMap { case Debt(from, to, _) => List(from, to) }
      .distinct
      .map(name => (name, new Node(name)))
      .toMap
Run Code Online (Sandbox Code Playgroud)

有一个愚蠢的方法来修复它,将视图转换为 seq,然后再转换回视图:

val nodes = debts.view
      .flatMap { case Debt(from, to, _) => List(from, to) }.toSeq.view
      .distinct
      .map(name => (name, new Node(name)))
      .toMap
Run Code Online (Sandbox Code Playgroud)

然而,这显然不太好,因为它强制收集视图,而且必须在类型之间来回切换也是非常不优雅的。我找到了另一种方法来修复它,即使用LazyList

val nodes = debts.to(LazyList)
      .flatMap { case Debt(from, to, _) => List(from, to) }
      .distinct
      .map(name => (name, new Node(name)))
      .toMap
Run Code Online (Sandbox Code Playgroud)

这就是我想要的,它基本上表现得像 …

scala

5
推荐指数
1
解决办法
396
查看次数

标签 统计

scala ×2

lazylist ×1

scala-collections ×1

stream ×1