如何以特定方式将两个可观察对象与RxJava合并?

时间:2015-10-21 14:27:32

标签: reactive-programming rx-java

我是RxJava的新手并遇到了下一个问题: 我有两个流:

Stream 1: -●-●-●-●-●-●-●-●-●-●-●->

Stream 2: -▲-▲-▲-▲-▲-▲-▲-▲-▲-▲-▲->

我需要以下一种方式从这两个流中合并第三个流:

Stream 3: -●-●-▲-●-●-▲-●-●-▲-●-●-▲->

这意味着我们有来自S1的两个元素和来自S2的元素,来自S1的两个元素和来自S2的元素......

如何使用RxJava完成?

2 个答案:

答案 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