Java:为什么不能迭代迭代器?

2024-01-25

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(使用前将#替换为@)

Java:为什么不能迭代迭代器? 的相关文章

随机推荐