scala - 通过将非惰性集合转换为流,惰性求值有多容易?

标签 scala functional-programming scala-2.11

这可能是个愚蠢的问题,但我已经有一段时间不确定了。假设这对我们的列表进行了三次迭代:

def doSomething(list: List[Int]): List[Int] =
  list.map(...).flatMap(...).map(...)

如果我改为:

def doSomething(list: List[Int]): List[Int] =
  list.toStream.map(...).flatMap(...).map(...).toList

我能保证单次迭代吗?

最佳答案

据我所知,转换为 .toStream 应该只进行一次迭代。
不过,更标准的做法是使用 .view,然后在最后使用 .force

def doSomething(list: List[Int]): List[Int] =
  list.view.map(...).flatMap(...).map(...).force

在集合上使用 .view 返回它的惰性版本,并在惰性 View 上调用 .force 创建集合。

关于scala - 通过将非惰性集合转换为流,惰性求值有多容易?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33559508/

相关文章:

scala - 是否可以在 akka.http.javadsl.server.Route 和 akka.http.scaladsl.server.Route 之间进行转换

scala - Raku 中的模式匹配是否有保护条款?

function - 使用 Haskell 创建高阶函数

Scala:使用 require 验证多个选项的优雅方式?

scala - 使用Scala 2.11在独立模式下运行Spark?

java - scala(包)对象反编译为 java - 包含 "new ();"的静态初始值设定项 - 那是什么?

Scala 反射在运行时访问所有公共(public)字段

r - R中这个函数的逻辑有什么问题?

scala - 从 Scala 宏访问代码文件和行号?

scala - 由于SSL连接已经关闭,如何解决Droping Close的错误