Код: Выделить всё
public class LimitDemo {
private static class State {
int count;
}
static Gatherer limit(int size) {
Supplier initializer = State::new;
Gatherer.Integrator integrator = (state, element, downstream) -> {
if (++state.count > size) {
return false;
}
return downstream.push(element);
};
return Gatherer.ofSequential(initializer, integrator);
}
public static void main(String[] args) {
var rng = new Random();
var result =
Stream.generate(() -> rng.nextInt(10)) // here
.gather(limit(10))
.toList();
System.out.println(result);
}
}
< /code>
Это работает очень хорошо: список из 10 случайных чисел напечатано на экране, как я и ожидал. Бесконечный поток случайных целых чисел является коротким. Если я заменим маркированную строку // ЗДЕСЬ Код: Выделить всё
rng.ints(0, 10).boxed()
< /code>
Затем моя программа завершается с помощью OutofmemoryException. По-видимому, intstream, сгенерированный случайным экземпляром Чего мне не хватает?
Подробнее здесь: https://stackoverflow.com/questions/796 ... -intstream