package org.jrack.context; import java.util.Iterator; public class CascadeIterator<T> implements Iterator<T> { private Iterable<? extends T>[] iterables; private Iterator<? extends T> current; private int index; public CascadeIterator(Iterable<? extends T>... iterables) { this.iterables = iterables; this.index = 0; current = null; } @Override public boolean hasNext() { while (null == current || !current.hasNext()) { if (index >= iterables.length) return false; current = iterables[index++].iterator(); } return current.hasNext(); } @Override public T next() { return current.next(); } @Override public void remove() { throw new UnsupportedOperationException("cannot remove from CascadeIterator"); } }