
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