Почему мой сборщик не застрял по потоку, если источник является Intstream?JAVA

Программисты JAVA общаются здесь
Anonymous
Почему мой сборщик не застрял по потоку, если источник является Intstream?

Сообщение Anonymous »

Я играю с сборщиками потоков, которые были представлены (или, по крайней мере, потерянный предварительный просмотр) в Java 24.

Код: Выделить всё

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

Вернуться в «JAVA»