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

时间:2017-07-27 12:58:33

标签: java reactive-programming project-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创建随机值流?

2 个答案:

答案 0 :(得分:5)

我使用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实际上足够长以发出数据,我加入了睡眠。

答案 1 :(得分:-3)

不确定你为什么这么做,但你可以尝试生成UUID

UUID.randomUUID()

删除破折号,相当长的十六进制数,总是不同。

EDIT。

如果您只想要小数,可以尝试:

String lUUID = String.format("%040d", new BigInteger(UUID.randomUUID().toString().replace("-", ""), 16));