blob: 3ff85eecf22f2d35f714cae77e8d337ec12e4aa3 [file] [log] [blame]
package org.usergrid.persistence.query.util;
import java.util.Iterator;
/**
* A simple iterator that allows us to "peek" to the next value without actually popping it.
* <p/>
* Meant as a wrapper to an existing iterator
*/
public class PeekingIterator<T> implements Iterable<T>, Iterator<T> {
private Iterator<T> delegate;
private T peeked;
public PeekingIterator( Iterator<T> delegate ) {
this.delegate = delegate;
}
@Override
public Iterator<T> iterator() {
return this;
}
@Override
public boolean hasNext() {
return peeked != null || delegate.hasNext();
}
@Override
public T next() {
T toReturn = null;
if ( peeked != null ) {
toReturn = peeked;
peeked = null;
}
else {
toReturn = delegate.next();
}
return toReturn;
}
/** Peek ahead in the iterator. Assumes a next is present and has been checked */
public T peek() {
if ( peeked == null && delegate.hasNext() ) {
peeked = delegate.next();
}
return peeked;
}
@Override
public void remove() {
throw new UnsupportedOperationException( "Remove is unsupported" );
}
}