package com.yoursway.utils; import java.util.Iterator; public class ChainedIterator<T> implements Iterator<T> { private final Iterator<T> first; private final Iterator<T> second; private boolean servedFromSecond = false; public ChainedIterator(Iterator<T> first, Iterator<T> second) { this.first = first; this.second = second; } public boolean hasNext() { return first.hasNext() || second.hasNext(); } public T next() { if (first.hasNext()) { servedFromSecond = false; return first.next(); } else { servedFromSecond = true; return second.next(); } } public void remove() { if (servedFromSecond) second.remove(); else first.remove(); } }