@runzhliu
2018-01-05T01:05:02.000000Z
字数 823
阅读 959
scala
view
参考资料
《高性能 Scala》
object LazyList {
def main(args: Array[String]): Unit = {
val evens = List(0, 1, 2, 3, 4, 5).map(i => {
println(s"Adding one to $i")
i + 1
}).filter(i => {
println(s"Filtering $i")
i % 2 == 0
})
println(evens.take(2))
println("=================")
val evensViews = List(0, 1, 2, 3, 4, 5).view.map(i => {
println(s"Adding one to $i")
i + 1
}).filter(i => {
println(s"Filtering $i")
i % 2 == 0
})
println(evensViews.take(2).toList)
}
}
Adding one to 0
Adding one to 1
Adding one to 2
Adding one to 3
Adding one to 4
Adding one to 5
Filtering 1
Filtering 2
Filtering 3
Filtering 4
Filtering 5
Filtering 6
List(2, 4)
=================
Adding one to 0
Filtering 1
Adding one to 1
Filtering 2
Adding one to 2
Filtering 3
Adding one to 3
Filtering 4
List(2, 4)
以上例子说明了如果使用急切计算方式,在下一个转换之前,每个转换都意义应用到了每一个元素。而如果使用惰性计算,在需要某一元素之前没有任何转换会被真正应用,意味着在调用 toList
之前,都不会发发生。当向一个视图转换的时候,会对每个元素应用所有的转换,而不是把每个转换应用到素有元素。