package com.googlecode.totallylazy.iterators;
import com.googlecode.totallylazy.Sequence;
import com.googlecode.totallylazy.Sequences;
import java.util.Iterator;
public class WindowedIterator<T> extends StatefulIterator<Sequence<T>> {
private Sequence<T> sequence;
private final int step;
private final int size;
public WindowedIterator(Iterator<? extends T> iterator, int size) {
this(iterator, 1, size);
}
public WindowedIterator(Iterator<? extends T> iterator, int step, int size) {
this.sequence = Sequences.memorise(iterator);
this.step = step;
this.size = size;
}
@Override
protected Sequence<T> getNext() throws Exception {
Sequence<T> take = sequence.take(size);
if (take.size() == size) {
sequence = sequence.drop(step);
return take;
}
return finished();
}
}