I read 为什么Java的Iterator不是Iterable? https://stackoverflow.com/questions/839178/why-is-javas-iterator-not-an-iterable and 为什么枚举不可迭代? https://stackoverflow.com/questions/27240/why-arent-enumerations-iterable,但我还是不明白为什么会这样:
void foo(Iterator<X> it) {
for (X x : it) {
bar(x);
baz(x);
}
}
没有成为可能。换句话说,除非我遗漏了什么,否则上面的内容可能是很好且有效的语法糖:
void foo(Iterator<X> it) {
for (X x; it.hasNext();) {
x = it.next();
bar(x);
baz(x);
}
}
最有可能的原因是迭代器不可重用;每次想要迭代元素时,都需要从 Iterable 集合中获取一个新的 Iterator。但是,作为一个快速解决方案:
private static <T> Iterable<T> iterable(final Iterator<T> it){
return new Iterable<T>(){ public Iterator<T> iterator(){ return it; } };
}
//....
{
// ...
// Now we can use:
for ( X x : iterable(it) ){
// do something with x
}
// ...
}
//....
也就是说,最好的办法就是简单地传递Iterable<T>
接口而不是Iterator<T>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)