Если генерация дорогостоящего элемента является синхронной и без сохранения состояния, используйте generate(Consumer<SynchronousSink>)
:
Flux<UUID> uuidFlux = Flux.generate(sink -> sink.next(UUID.randomUUID());
Если она синхронная и с сохранением состояния, используйте соответствующие перегрузки:
Flux<String> customUuidFlux = Flux.generate(AtomicLong::new, (indexState, sink) -> {
sink.next("item#" + indexState.getAndIncrement() + "-" + UUID.randomUUID());
return indexState;
});