参考
yield 关键字用来暂停和恢复一个生成器函数((function* 或遗留的生成器函数)
ES6详解七:循环的秘密 - iterator 和 yield
js 的 Iterator
在 Symbol.iterator 出现后,js中也可以自己定义一个迭代器。
只要一个对象实现了正确的 Symbol.iterator 方法,那么它就可以被 for in 所遍历,如下所示:1
2
3
4
5
6
7
8
9
10
11
12function* fibs() {
let a = 0;
let b = 1;
while (true) {
yield a;
[a, b] = [b, a + b];
}
}
//let [first, second, third, fourth, fifth, sixth] = fibs(); //会循环6次,first=0 ... sixth=5
let [first, second] = fibs(); //会循环两次
document.writeln("second value is: " + second); //second=1
用过 Java 的应该知道迭代器(Iterator),复习一下
java 的 Iterator
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
Java中的Iterator功能比较简单,并且只能单向移动:
- 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。
- 使用next()获得序列中的下一个元素。
- 使用hasNext()检查序列中是否还有元素。
- 使用remove()将迭代器新返回的元素删除。
迭代器应用:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23public void iteratorTest()
{
List<String> strArray = new ArrayList<>();
strArray.add("a");
strArray.add("b");
strArray.add("c");
for (Iterator iterator = strArray.iterator(); iterator.hasNext(); )
{
String strValue = (String) iterator.next();
System.out.println(strValue);
}
//迭代器用于while循环
Iterator iterator = strArray.iterator();
while (iterator.hasNext())
{
String strValue = (String) iterator.next();
System.out.println(strValue);
}
}
另外,Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。