package org.unicode.cldr.util; import java.util.Iterator; import java.util.NoSuchElementException; public class DelegatingIterator implements Iterator { private Iterator[] iterators; private int item = 0; @SuppressWarnings("unchecked") public DelegatingIterator(Iterator... iterators) { this.iterators = iterators; } public boolean hasNext() { while (item < iterators.length) { boolean result = iterators[item].hasNext(); if (result) { return true; } ++item; } return false; } public T next() { while (item < iterators.length) { try { return iterators[item].next(); } catch (NoSuchElementException e) { ++item; } } throw new NoSuchElementException(); } public void remove() { throw new UnsupportedOperationException(); } @SuppressWarnings("unchecked") public static Iterable iterable(Iterable... s) { return new MyIterable(s); } @SuppressWarnings("unchecked") public static T[] array(T... s) { return s; } private static class MyIterable implements Iterable { public Iterable[] iterables; @SuppressWarnings("unchecked") public MyIterable(Iterable... s) { iterables = s; } @SuppressWarnings("unchecked") public Iterator iterator() { Iterator[] iterators = new Iterator[iterables.length]; for (int i = 0; i < iterables.length; ++i) { iterators[i] = iterables[i].iterator(); } return new DelegatingIterator(iterators); } } }