如何将 for each 循环与在 Java 中返回迭代器的函数一起使用?例如,我想对具有此签名的函数使用 for-each 循环:
public Iterator<Integer> intIterator();
有可能还是我必须使用常规的for循环?
不幸的是,Java 的 for-each 被定义为需要一个Iterable
,而Iterator
s 不是Iterable
。如果您想为树提供 3 种迭代器或在数据结构上提供前向和后向迭代器,这可能会很痛苦。
最简单的方法是使用常规 for 循环,但如果您愿意,可以编写一个包装类,如下所示:
public class IteratorWrapper<E> implements Iterable<E> {
private Iterator<E> iterator;
public IteratorWrapper(Iterator<E> iterator) {
this.iterator = iterator;
}
public Iterator<E> iterator() {
return iterator;
}
// Static import the following method for less typing at the
// call sites.
public static <E> IteratorWrapper<E> wrapIter(Iterator<E> iterator) {
return new IteratorWrapper<E>(iterator);
}
}
您不能像其他人所说的那样直接使用迭代器。
制作另一个功能:
public Iterable<Integer> intIterable() {
return new Iterable<Integer>() {
@Override
public Iterator<Integer> iterator() {
return intIterator();
}
}
}
在 for-each 循环中使用,例如
for ( Integer int : object.intIterable() ) {
}
for-each
循环只能遍历数组或java.lang.Iterable
. 你做不到。
你可以像迭代一样 -
Iterator<Integer> iterator = intIterator();
for (; iterator.hasNext();) {
Integer type = iterator.next();
}