@runzhliu
2018-01-05T01:05:02.000000Z
字数 823
阅读 1043
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 0Adding one to 1Adding one to 2Adding one to 3Adding one to 4Adding one to 5Filtering 1Filtering 2Filtering 3Filtering 4Filtering 5Filtering 6List(2, 4)=================Adding one to 0Filtering 1Adding one to 1Filtering 2Adding one to 2Filtering 3Adding one to 3Filtering 4List(2, 4)
以上例子说明了如果使用急切计算方式,在下一个转换之前,每个转换都意义应用到了每一个元素。而如果使用惰性计算,在需要某一元素之前没有任何转换会被真正应用,意味着在调用 toList 之前,都不会发发生。当向一个视图转换的时候,会对每个元素应用所有的转换,而不是把每个转换应用到素有元素。
