这可能是一个愚蠢的问题,但我一直不确定它。让我们假设这遍历了我的列表三次:
def doSomething(list: List[Int]): List[Int] =
list.map(...).flatMap(...).map(...)
如果我改为:
def doSomething(list: List[Int]): List[Int] =
list.toStream.map(...).flatMap(...).map(...).toList
我保证一次迭代吗?
答案 0 :(得分:5)
据我所知,转换为.toStream只能进行一次迭代
但是,执行此操作的更标准方法是使用.view
,然后使用.force
def doSomething(list: List[Int]): List[Int] =
list.view.map(...).flatMap(...).map(...).force
在集合上使用.view
会返回它的惰性版本,并且在惰性视图上调用.force
会创建集合。