创建自己的 Iterable
要像使用任何接口一样创建自己的 Iterable,只需在界面中实现抽象方法即可。对于 Iterable
,只有一个叫做 iterator()
。但它的返回类型 Iterator
本身就是一个有三种抽象方法的接口。你可以返回与某个集合关联的迭代器,也可以创建自己的自定义实现:
public static class Alphabet implements Iterable<Character> {
@Override
public Iterator<Character> iterator() {
return new Iterator<Character>() {
char letter = 'a';
@Override
public boolean hasNext() {
return letter <= 'z';
}
@Override
public Character next() {
return letter++;
}
@Override
public void remove() {
throw new UnsupportedOperationException("Doesn't make sense to remove a letter");
}
};
}
}
使用:
public static void main(String[] args) {
for(char c : new Alphabet()) {
System.out.println("c = " + c);
}
}
新的 Iterator
应该带有指向第一个项目的状态,每次调用 next 都会更新其状态以指向下一个项目。hasNext()
检查迭代器是否在最后。如果迭代器连接到可修改的集合,则可以实现迭代器的可选 remove()
方法,以从基础集合中删除当前指向的项。