我有一个集合,其中包含了若干Message
对象。
我想通过RxJava从集合中每隔一秒依次发送集合中的对象
我一开始的时候想这样操作,发现一次也不发送对象
Flowable<Message> messageFlowable = Flowable.fromIterable(mock.messages);
Flowable<Long> timeFlowable = Flowable.interval(1, TimeUnit.SECONDS);
Flowable<String> flowable = Flowable.zip(messageFlowable, timeFlowable, new BiFunction<Message, Long, String>() {
@Override
public String apply(Message message, Long aLong) throws Exception {
return message.content;
}
});
flowable.subscribe(/*....*/)
后来我就想用这种方式
Flowable.fromIterable(mock.messages)
.map(message -> message.content)
.delay(1, TimeUnit.SECONDS)
.subscribe(s -> Timber.d("s = %s", s));
但是发现集合一瞬间就被发送完了。并没有被延时。
有什么办法可以延时发送集合吗?
delay(1s) delay(1s) delay(1s)
0 -----------> 1 -----------> 2 -----------> 3 ...
RxJava我没用过,但我用过RxJS, 大体思想应该一下
你应该这样先起一个定时器的流,然后每个流都去接上新的流。
因为interval的时间不保准,所以用flatMap使用流上所有的数据。
具体的API可能不一样,但是大致是这个思想吧。