0

Java で反復子を返す関数で for each ループを使用するにはどうすればよいですか? たとえば、次のシグネチャを持つ関数に for-each ループを使用したいと思います。

public Iterator<Integer> intIterator();

それは可能ですか、それとも通常の for ループを使用する必要がありますか?

4

3 に答える 3

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);
    }
}
于 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-eachloop は、配列または のインスタンスに対してのみ反復できますjava.lang.Iterable。あなたはそれを行うことはできません。

次のように繰り返すことができます-

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