使用for-each循环和一个返回迭代器的函数

时间:2013-09-19 05:03:08

标签: java foreach iterator

如何在每个循环中使用带有在Java中返回迭代器的函数?例如,我想为具有此签名的函数使用for-each循环:

public Iterator<Integer> intIterator();

是否可以或者我必须使用常规for循环?

3 个答案:

答案 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() ) {
}