如何在每个循环中使用带有在Java中返回迭代器的函数?例如,我想为具有此签名的函数使用for-each循环:
public Iterator<Integer> intIterator();
是否可以或者我必须使用常规for循环?
答案 0 :(得分:4)
不幸的是,Java for-each被定义为需要Iterable
,而Iterator
不是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);
}
}
答案 1 :(得分:0)
for-each
循环只能迭代数组或java.lang.Iterable
的实例。你做不了。
你可以像 -
那样迭代Iterator<Integer> iterator = intIterator();
for (; iterator.hasNext();) {
Integer type = iterator.next();
}
答案 2 :(得分:0)
你不能像其他人所说的那样直接使用迭代器。
制作另一个功能:
public Iterable<Integer> intIterable() {
return new Iterable<Integer>() {
@Override
public Iterator<Integer> iterator() {
return intIterator();
}
}
}
在for-each循环中使用,如
for ( Integer int : object.intIterable() ) {
}