
org.davidmoten.kool.internal.operators.stream.SkipLast Maven / Gradle / Ivy
package org.davidmoten.kool.internal.operators.stream;
import java.util.NoSuchElementException;
import org.davidmoten.kool.Stream;
import org.davidmoten.kool.StreamIterator;
import org.davidmoten.kool.internal.util.RingBuffer;
public final class SkipLast implements Stream {
private final Stream stream;
private final int size;
public SkipLast(int size, Stream stream) {
this.stream = stream;
this.size = size;
}
@Override
public StreamIterator iterator() {
RingBuffer buffer = new RingBuffer(size + 1);
StreamIterator it = stream.iterator();
return new StreamIterator() {
@Override
public boolean hasNext() {
loadNext();
return buffer.size() == size + 1;
}
@Override
public T next() {
loadNext();
if (buffer.size() == size + 1) {
return buffer.poll();
} else {
throw new NoSuchElementException();
}
}
@Override
public void dispose() {
it.dispose();
}
private void loadNext() {
while (buffer.size() < size + 1 && it.hasNext()) {
buffer.add(it.next());
}
}
};
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy