如何使用 Reactor 创建随机数生成器?

How to create a random number generator using Reactor?

我想通过重复发射随机数来模拟测量数据。我尝试用 Reactor 来做,但它没有产生任何输出:

private static Random random = new Random();

public static void main(String[] args) throws InterruptedException {
    Flux<Double> doubleGenerator = Flux.generate(
            () -> random.nextDouble(),
            (ignored, sink) -> {
                sink.next(random.nextDouble());
                return 0.0;
            });
    Flux<Long> timer = Flux.intervalMillis(1000);
    Flux.combineLatest(doubleGenerator, timer, (value, ignored) -> value)
            .subscribe(System.out::println);
}

如何使用 Reactor 创建随机值流?

我使用 Reactor 3.1 解决了这个问题,所以在下面的解决方案中 Flux.intervalMillis(long) 已更改为 Flux.interval(Duration)。本质上,我创建了一个 Flux,它每隔一段时间(在我的例子中是每秒一次)发出一个数字,然后将其映射到一个随机数。

final Random random = new Random();
Flux.interval(Duration.ofSeconds(1))
        .map(pulse -> random.nextDouble())
        .subscribe(System.out::println);
Thread.sleep(5000);

我只是用普通的 main() 方法做了我的例子,所以为了让 Flux 实际存在足够长的时间来发出数据,我添加了睡眠。