/** * BSD-style license; for more info see http://pmd.sourceforge.net/license.html */ package net.sourceforge.pmd.util; import java.util.Iterator; import java.util.NoSuchElementException; /** * Creates a single compound Iterator from an array of Iterators. * * @param <T> * The type returned by the Iterator. * * @see Iterator */ public class CompoundIterator<T> implements Iterator<T> { private final Iterator<T>[] iterators; private int index; /** * * @param iterators * The iterators use. */ public CompoundIterator(Iterator<T>... iterators) { this.iterators = iterators; this.index = 0; } /** * {@inheritDoc} */ @Override public boolean hasNext() { return getNextIterator() != null; } /** * {@inheritDoc} */ @Override public T next() { Iterator<T> iterator = getNextIterator(); if (iterator != null) { return iterator.next(); } else { throw new NoSuchElementException(); } } /** * {@inheritDoc} */ @Override public void remove() { Iterator<T> iterator = getNextIterator(); if (iterator != null) { iterator.remove(); } else { throw new IllegalStateException(); } } // Get the next iterator with values, returns null if there is no such // iterator private Iterator<T> getNextIterator() { while (index < iterators.length) { if (iterators[index].hasNext()) { return iterators[index]; } else { index++; } } return null; } }