package com.outbrain.utils; import java.util.Iterator; public class InterleavedIterator implements Iterator { private Iterator it1; private Iterator it2; private boolean takeFirst; public InterleavedIterator(Iterator it1, Iterator it2) { this(it1, it2, true); } public InterleavedIterator(Iterator it1, Iterator it2, final boolean takeFirst) { this.it1 = it1; this.it2 = it2; this.takeFirst = takeFirst; } @Override public boolean hasNext() { return it1.hasNext() || it2.hasNext(); } @Override public T next() { T res = null; if (takeFirst && it1.hasNext()) { res = it1.next(); takeFirst = false; } else if (it2.hasNext()) { res = it2.next(); takeFirst = true; } else if (it1.hasNext()) { res = it1.next(); } return res; } }