【问题标题】:How easy is lazy evaluation by converting a non-lazy collection to a stream?通过将非惰性集合转换为流,惰性求值有多容易?
【发布时间】:2015-11-06 04:27:49
【问题描述】:

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

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

如果我这样做:

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

我能保证一次迭代吗?

【问题讨论】:

    标签: scala functional-programming scala-2.11


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。谷歌搜索你的答案将我带到this,这也很有帮助。看起来view/force 是要走的路。也就是说,我希望能更详细地解释流与视图的不同之处。
    猜你喜欢
    • 1970-01-01
    • 2011-11-22
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2018-02-27
    • 2012-09-14
    • 1970-01-01
    相关资源
    最近更新 更多