Stream generators (original) (raw)

Paul Sandoz paul.sandoz at oracle.com
Fri Nov 30 11:13:46 PST 2012


On Nov 30, 2012, at 6:41 PM, Joe Bowbeer <joe.bowbeer at gmail.com> wrote:

My first impression is that there are a lot. Whether they carry their weight depends on how difficult it is to implement these directly.

The following:

<T> Stream<T> repeat(T t)
<T> Stream<T> repeat(int n, T t)
<T> Stream<T> repeatedly(Supplier<T> f)

all defer to:

public static<T> Stream<T> repeatedly(final int n, final Supplier<T> f) {
    Objects.requireNonNull(f);

    if (n < 0) {
        InfiniteIterator<T> iterator = () -> f.get();
        return stream(new StreamSource.ForIterator<>(iterator), StreamOpFlag.IS_ORDERED);
    }
    else {
        final Iterator<T> repeatedly = new Iterator<T>() {
            int c = n;

            @Override
            public boolean hasNext() {
                return c > 0;
            }

            @Override
            public T next() {
                if (!hasNext()) {
                    throw new NoSuchElementException();
                }

                c--;
                return f.get();
            }
        };

        return stream(new StreamSource.ForIterator<>(repeatedly), StreamOpFlag.IS_ORDERED);
    }
}

Paul.



More information about the lambda-libs-spec-observers mailing list