我注意到它Stream已被弃用Scala 2.13,他们建议使用LazyList. 他们还说“使用 LazyList(完全懒惰)而不是 Stream(只有一个懒惰的尾巴)”。
它到底是什么意思?他们为什么弃用Stream?
我正在将一个项目从 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)
这就是我想要的,它基本上表现得像 …