通过将非惰性集合转换为流,惰性求值有多容易?
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
创建集合。
这可能是个愚蠢的问题,但我已经有一段时间不确定了。假设这对我们的列表进行了三次迭代:
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
创建集合。