我是RxJava的新手并遇到了下一个问题: 我有两个流:
Stream 1: -●-●-●-●-●-●-●-●-●-●-●->
Stream 2: -▲-▲-▲-▲-▲-▲-▲-▲-▲-▲-▲->
我需要以下一种方式从这两个流中合并第三个流:
Stream 3: -●-●-▲-●-●-▲-●-●-▲-●-●-▲->
这意味着我们有来自S1的两个元素和来自S2的元素,来自S1的两个元素和来自S2的元素......
如何使用RxJava完成?
答案 0 :(得分:2)
Zip
是答案的一半,buffer
是另一半:
Observable<String> source1 = Observable.just("●").repeat(8);
Observable<String> source2 = Observable.just("▲").repeat(4);
Observable.zip(source1.buffer(2), source2, (a, b) -> {
return Observable.just(a.get(0), a.get(1), b);
})
.flatMap(v -> v)
.doOnSubscribe(() -> System.out.print('-'))
.subscribe(v -> {
System.out.print(v);
System.out.print("-");
}, Throwable::printStackTrace,
() -> System.out.println(">"));
答案 1 :(得分:0)
看一下zip,它允许你传入2个observable和一个函数来应用于observable发出的每个项目。 http://reactivex.io/documentation/operators/zip.html