[关闭]
@runzhliu 2018-01-05T01:05:02.000000Z 字数 823 阅读 838

Scala 使用视图提高集合操作效率

scala view


参考资料
《高性能 Scala》

1 惰性计算

  1. object LazyList {
  2. def main(args: Array[String]): Unit = {
  3. val evens = List(0, 1, 2, 3, 4, 5).map(i => {
  4. println(s"Adding one to $i")
  5. i + 1
  6. }).filter(i => {
  7. println(s"Filtering $i")
  8. i % 2 == 0
  9. })
  10. println(evens.take(2))
  11. println("=================")
  12. val evensViews = List(0, 1, 2, 3, 4, 5).view.map(i => {
  13. println(s"Adding one to $i")
  14. i + 1
  15. }).filter(i => {
  16. println(s"Filtering $i")
  17. i % 2 == 0
  18. })
  19. println(evensViews.take(2).toList)
  20. }
  21. }
  22. Adding one to 0
  23. Adding one to 1
  24. Adding one to 2
  25. Adding one to 3
  26. Adding one to 4
  27. Adding one to 5
  28. Filtering 1
  29. Filtering 2
  30. Filtering 3
  31. Filtering 4
  32. Filtering 5
  33. Filtering 6
  34. List(2, 4)
  35. =================
  36. Adding one to 0
  37. Filtering 1
  38. Adding one to 1
  39. Filtering 2
  40. Adding one to 2
  41. Filtering 3
  42. Adding one to 3
  43. Filtering 4
  44. List(2, 4)

以上例子说明了如果使用急切计算方式,在下一个转换之前,每个转换都意义应用到了每一个元素。而如果使用惰性计算,在需要某一元素之前没有任何转换会被真正应用,意味着在调用 toList 之前,都不会发发生。当向一个视图转换的时候,会对每个元素应用所有的转换,而不是把每个转换应用到素有元素。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注