发射列表的每个项目的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