通过将非惰性集合转换为流来进行延迟评估有多容易?

时间:2015-11-06 04:27:49

标签: 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

我保证一次迭代吗?

1 个答案:

答案 0 :(得分:5)

据我所知,转换为.toStream只能进行一次迭代 但是,执行此操作的更标准方法是使用.view,然后使用.force

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

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