Las*_*asf 3 functional-programming scala scala-2.11
这可能是一个愚蠢的问题,但我已经有一段时间不确定了.让我们假设这遍历我的列表三次:
def doSomething(list: List[Int]): List[Int] =
list.map(...).flatMap(...).map(...)
Run Code Online (Sandbox Code Playgroud)
如果我改为:
def doSomething(list: List[Int]): List[Int] =
list.toStream.map(...).flatMap(...).map(...).toList
Run Code Online (Sandbox Code Playgroud)
我保证一次迭代吗?
据我所知,转换为.toStream应该只进行一次迭代.
但是,更为标准的做法是使用.view然后.force最后
def doSomething(list: List[Int]): List[Int] =
list.view.map(...).flatMap(...).map(...).force
Run Code Online (Sandbox Code Playgroud)
使用.view上一集返回它的懒惰版本,并呼吁.force就懒视图创建集合.