package com.revolsys.collection.iterator; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.NoSuchElementException; public class MultiIterator<V> extends AbstractIterator<V> { private Iterator<V> iterator; private final List<Iterator<V>> iterators = new LinkedList<>(); @SuppressWarnings("unchecked") public MultiIterator(final Iterable<? extends Object> iterables) { for (final Object value : iterables) { if (value instanceof Iterator) { final Iterator<V> iterator = (Iterator<V>)value; this.iterators.add(iterator); } else if (value instanceof Iterable) { final Iterable<V> iterable = (Iterable<V>)value; final Iterator<V> iterator = iterable.iterator(); this.iterators.add(iterator); } else { throw new IllegalArgumentException("List must contain Iterator or Iterable values"); } } } @Override protected V getNext() throws NoSuchElementException { while (this.iterator == null || !this.iterator.hasNext()) { if (this.iterators.isEmpty()) { throw new NoSuchElementException(); } else { this.iterator = this.iterators.remove(0); } } return this.iterator.next(); } }