我刚刚开始使用RxJava / android并且练习和入门我希望每1秒发出一个字符串中发出字符的observable,我该怎么做?这是我到目前为止所尝试的,它只是立即发出字符串:
Observable<String> myObservable = Observable.interval(5000L, TimeUnit.MILLISECONDS)
.observeOn(AndroidSchedulers.mainThread())
.just("Hello");
我想要这样你好,先发射H后1秒发射E等等
答案 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> letters
和Observable.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()
将与之前的流无关。