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

How easy is lazy evaluation by converting a non-lazy collection to a stream?

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

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

在集合 returns 上使用 .view 惰性版本,并在惰性视图上调用 .force 创建集合。