发射列表的每个项目的RxJava延迟

我正在努力实现我认为在Rx中相当简单的东西。

我有一个项目列表,我想延迟每个项目的发出。

似乎Rx delay()运算符只是将所有项目的发射偏移指定的延迟,而不是每个单独的项目。

这是一些测试代码。它将列表中的项目分组。然后,每个组应在发出之前应用延迟。

Observable.range(1, 5)

.groupBy(n -> n % 5)

.flatMap(g -> g.toList())

.delay(50, TimeUnit.MILLISECONDS)

.doOnNext(item -> {

System.out.println(System.currentTimeMillis() - timeNow);

System.out.println(item);

System.out.println(" ");

}).toList().toBlocking().first();

结果是:

154ms

[5]

155ms

[2]

155ms

[1]

155ms

[3]

155ms

[4]

但是我希望看到的是这样的:

174ms

[5]

230ms

[2]

285ms

[1]

345ms

[3]

399ms

[4]

我究竟做错了什么?

回答:

一种方法是zip将可观察值与Interval可观察值结合起来以延迟输出。

Observable.zip(Observable.range(1, 5)

.groupBy(n -> n % 5)

.flatMap(g -> g.toList()),

Observable.interval(50, TimeUnit.MILLISECONDS),

(obs, timer) -> obs)

.doOnNext(item -> {

System.out.println(System.currentTimeMillis() - timeNow);

System.out.println(item);

System.out.println(" ");

}).toList().toBlocking().first();

以上是 发射列表的每个项目的RxJava延迟 的全部内容, 来源链接: utcz.com/qa/402617.html

回到顶部