如何使 Observable 在 1 秒的时间间隔后发出字符 [英] How to make Observable that emit character after 1 second of time interval

查看:37
本文介绍了如何使 Observable 在 1 秒的时间间隔后发出字符的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我刚刚开始使用 RxJava/android,为了练习和入门,我想让 observable 每 1 秒发出一次字符串中的字符,我该怎么做?这是我到目前为止所尝试的,它只是一次发出字符串:

I have just started with RxJava/android and for practice and getting started I want to make observable that emits character in string every 1 second, how can I do this? Here is what I have tried so far, its just emit string at once:

Observable<String> myObservable = Observable.interval(5000L, TimeUnit.MILLISECONDS)
            .observeOn(AndroidSchedulers.mainThread())
            .just("Hello");

我希望像这样的 hello 在 1 秒后发出 E 后首先发出 H 以此类推

I want hello like this first emit H after 1 second emit E and so on

推荐答案

使用 flatMap() 将字符串hello"拆分为字母h"、e"、...o".

Split String "hello" into letters "h", "e", ... "o" using flatMap().

new ArrayList<>(Arrays.asList(string.split("")))) 构造 ListletterObservable.fromIterable(letters) 将每个字母发送到下游.

new ArrayList<>(Arrays.asList(string.split("")))) constructs List<String> letters and Observable.fromIterable(letters) emits each letter to downstream.

然后zipWith()压缩两个Observable,一个是字母,另一个是1秒时间.

Then zipWith() zips two Observables, one is letter, other is 1 second Time.

public static void main(String[] args) throws InterruptedException {

    Observable.just("Hello")
            .flatMap(string -> Observable.fromIterable(new ArrayList<>(Arrays.asList(string.split("")))))
            .zipWith(Observable.interval(0, 1, TimeUnit.SECONDS), (letter, time) -> letter)
            .subscribe(System.out::println);

    Thread.sleep(5000);
}

打印:

H
e
l
l
o

Process finished with exit code 0

这篇关于如何使 Observable 在 1 秒的时间间隔后发出字符的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆