我想通过重复发射随机数来模拟测量数据。我尝试使用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创建随机值流?
答案 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));