package util; import java.util.Iterator; /** * Wraps an iterator, allowing to peek the next item. {@link Iterator#remove()} * is unsupported. */ public class PeekIterator<T> implements Iterator<T> { /****************************************************************************/ private final Iterator<T> iterator; /****************************************************************************/ private T top; /****************************************************************************/ public PeekIterator(Iterable<T> iterable) { this.iterator = iterable.iterator(); advance(); } /****************************************************************************/ private void advance() { top = iterator.hasNext() ? iterator.next() : null; } /****************************************************************************/ public T peek() { return top; } /****************************************************************************/ @Override public boolean hasNext() { return top != null; } /****************************************************************************/ @Override public T next() { T old = top; advance(); return old; } /****************************************************************************/ @Override public void remove() { throw new UnsupportedOperationException(); } }