package com.yahoo.dtf.util;
import java.util.Iterator;
/**
* A simple implementation of a peekable Iterator which allows you to peek one
* element into the iterator and then retrieve it on the next next() call.
*
* @author rlgomes
* @param <E>
*/
public class PeekableIterator<E> implements Iterator<E> {
Iterator<E> iterator = null;
E peeked = null;
public PeekableIterator(Iterator<E> iterator) {
this.iterator = iterator;
}
public boolean hasNext() {
return iterator.hasNext() || peeked != null;
}
public E next() {
E result = null;
if ( peeked != null ) {
result = peeked;
peeked = null;
} else {
result = iterator.next();
}
return result;
}
public void remove() {
if ( peeked != null ) {
peeked = null;
} else {
iterator.remove();
}
}
/**
* return the next available element without moving the iterator forward.
* @return
*/
public E peek() {
if ( peeked == null )
peeked = iterator.next();
return peeked;
}
}