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

net.datafaker.sequence.FakeStream Maven / Gradle / Ivy

package net.datafaker.sequence;

import net.datafaker.service.RandomService;

import java.util.Iterator;
import java.util.List;
import java.util.function.Supplier;
import java.util.stream.Stream;

public class FakeStream extends FakeSequence {
    private FakeStream(List> suppliers, int minLength, int maxLength, RandomService randomService, double nullRate) {
        super(suppliers, minLength, maxLength, randomService, nullRate);
    }

    @SuppressWarnings("unchecked")
    public Stream get() {
        if (isInfinite()) {
            return Stream.generate(this::singleton);
        }

        int size = randomService.nextInt(minLength, maxLength);
        return Stream.generate(this::singleton).limit(size);
    }

    public boolean isInfinite() {
        return maxLength < 0;
    }

    @Override
    public Iterator iterator() {
        return get().iterator();
    }

    public static class Builder extends FakeSequence.Builder {
        public Builder() {
            super();
        }

        public Builder(List> list) {
            super(list);
        }

        @SafeVarargs
        public Builder(Supplier... elems) {
            super(elems);
        }

        @Override
        public FakeStream build() {
            if (maxLength >= 0 && minLength > maxLength) {
                throw new IllegalArgumentException("Max length (%s) must be not less than min length (%s) and not negative".formatted(maxLength, minLength));
            }
            minLength = minLength < 0 ? maxLength : minLength;

            RandomService randomService;
            if (faker == null) {
                randomService = new RandomService();
            } else {
                randomService = faker.random();
            }

            return new FakeStream<>(suppliers, minLength, maxLength, randomService, nullRate);
        }
    }

    @Override
    public String toString() {
        return "FakeStream{minLength=%d, maxLength=%d, nullRate=%s}".formatted(minLength, maxLength, nullRate);
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy