All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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