如何使Observable在1秒的时间间隔后发出字符

时间:2017-10-17 10:13:50

标签: java android rx-java rx-android rx-java2

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

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

我想要这样你好,先发射H后1秒发射E等等

2 个答案:

答案 0 :(得分:3)

Split String&#34; hello&#34;字母&#34; h&#34;,&#34; e&#34;,...&#34; o&#34;使用flatMap()

new ArrayList<>(Arrays.asList(string.split(""))))构造List<String> lettersObservable.fromIterable(letters)向下游发出每个字母。

然后zipWith()拉下两个Observable,一个是字母,另一个是1秒。

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

答案 1 :(得分:0)

您可以zip使用字符生成源的时间间隔,例如StringFlowable.characters()扩展名运算符:

StringFlowable.characters("Hello world")
.zipWith(Flowable.interval(1000L, TimeUnit.MILLISECONDS), (a, b) -> a)
.observeOn(AndroidSchedulers.mainThread())
.blockingSubscribe(System.out::print, Throwable::printStackTrace, System.out::println);
  

.observeOn(AndroidSchedulers.mainThread()).just("Hello");

请注意,just是一个返回新的独立Observable的静态方法,因此在实例方法上调用.just()将与之前的流无关。