0

如何将 for each 循环与在 Java 中返回迭代器的函数一起使用?例如,我想对具有此签名的函数使用 for-each 循环:

public Iterator<Integer> intIterator();

有可能还是我必须使用常规的for循环?

4

3 回答 3

4

不幸的是,Java 的 for-each 被定义为需要一个Iterable,而Iterators 不是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);
    }
}
于 2013-09-19T05:08:22.187 回答
0

您不能像其他人所说的那样直接使用迭代器。

制作另一个功能:

public Iterable<Integer> intIterable() {
    return new Iterable<Integer>() {
        @Override
        public Iterator<Integer> iterator() {
                    return intIterator();
        }
    }
}

在 for-each 循环中使用,例如

for ( Integer int : object.intIterable() ) {
}
于 2013-09-19T05:23:33.257 回答
0

for-each循环只能遍历数组或java.lang.Iterable. 你做不到。

你可以像迭代一样 -

Iterator<Integer> iterator = intIterator();
for (; iterator.hasNext();) {
    Integer type =  iterator.next();
}
于 2013-09-19T05:08:54.740 回答