Scala函数式程序设计 week2 Lazy Evaluation
来源:互联网 发布:mac下windows虚拟机 编辑:程序博客网 时间:2024/06/07 22:14
迭代器
可以用iterator
方法从集合获得一个迭代器。
对于那些完整构造需要很大开销的集合而言,迭代器很有用。
有了迭代器,可以用next
和hasNext
来遍历集合中的元素
while(iter.hasNext)对 iter.next()执行某种操作//---------------------for (elem <- iter)对elem执行某种操作
上述两种循环都会将迭代器移动到集合的末尾,在此之后就不能再使用了。 Iterator
类定义了与集合方法使用起来完全相同的方法。除了head,headOption,last,lastOption,tail,init,takeRight,dropRight外。
在调用了诸如map,filter,count,sum甚至length方法后,迭代器将位于集合的尾端。
对于其他方法,比如find或take,迭代器位于已找到元素或已取得元素之后。
可以用toArray,toIterable,toSeq,toSet或toMap将值拷贝到新的集合中。
流
迭代器具有一个缺点,每次对next的调用都会改变迭代器的指向。stream
提供的是一个不可变的替代品。流是一个尾部被懒计算的不可变列表,只有当需要时才会被计算。
def numsFrom(n:Int):Stream[Int] = n #:: numsFrom(n+1)
#::
操作符类似::
操作符,种子不过构建出来的是一个流。
调用
调用 val tenOrMore = numsFrom(10)时得到的是一个被显示为Stream(10,?)的流对象
其尾部是未被求值的。
流的方法是懒执行的
val squares = numsFrom(1).map(x => x*x)//将产出Stream(1,?)
如果想要得到多个答案,可以调用take
,然后用force
,这将强制对所有值求值。
如
squares.take(5).forecesquares.force //不能这样写,这个调用尝试对一个无穷流的所有成员进行求值,引发内存错误
可以从迭代器构造一个流。流将缓存访问过的所有行,允许重新访问。
阅读全文
0 0
- Scala函数式程序设计 week2 Lazy Evaluation
- Scala函数式程序设计原理 week2 Higher Order Functions
- Scala函数式程序设计原理 week1 Getting Started + Functions & Evaluation
- Scala程序设计-Evaluation Strategy
- lazy evaluation缓式评估
- R lazy evaluation
- 惰性求值-Lazy evaluation
- 条款十七:考虑使用lazy evaluation(缓式评估)
- Scala函数式程序设计原理 week5 List
- Scala函数式程序设计原理 week6 collections
- Scala函数式程序设计 week4 Timely Effects
- Scala lazy
- C++的拖延战术:lazy evaluation
- Scala and Evaluation Strategy
- C++ 程序设计 week2
- c++ 程序设计 week2 作业
- C程序设计进阶week2
- Scala函数式程序设计原理 week3 Data and Abstraction
- Java实现邮件提醒功能
- Groovy基本使用(1):安装配置
- [嵌入式Linux驱动]S5PV210的步进电机Linux驱动程序
- 如何把eclipse 改成汉化中文版
- uboot2013-10移植(二)--mkconfig注释
- Scala函数式程序设计 week2 Lazy Evaluation
- shell 变量特殊扩展:示例
- SSM整合
- 4.数字颠倒
- 第三周项目二 建立算法库
- ios-Swift中的extension
- (转存)深入理解Java的接口和抽象类
- Immutable.js使用过程中的函数整理
- C语言实验题——计算评分