Rxjava合并操作符
合并操作符 | 作用 |
---|---|
startWith | 在Observable发射的数据前添加一个数据, |
merge, mergeDelayError | 将多个Observable合并为一个,mergeDelayError,是全部Observable发射完执行onError |
zip | 使用一个函数组合多个Observable发射的数据,然后再发射这个合并数据的结果 |
combineLatest | 当两个Observable中任何一个发射了一个数据时,通过一个指定的函数组合两个Observable发射的最新数据,然后发射组合的结果 |
join | 无论何时,一个Observable发射了一个数据,都需要跟另一个Observable发射的所有数据项合并发射 |
switchOnNext | 将一个发射Observable的Observable转换成另一个Observable,后者发射这些Observable最近发射的数据 |
merge, mergeDelayError
合并多个Observable,merge是按照时间线执行的,如果发射过程中有一个有onError,则全部都会停止。如果想让所有的Observable全部发射完数据,直到最后才报告onError,就使用mergeDelayError.
//输出1,2,3,4,5,6
Observable<Integer> odds = Observable.just(1,2,3);
Observable<Integer> evens = Observable.just(4,5,6);
Observable.merge(odds, evens)
.subscribe(s -> System.out.println(s));
zip
通过一个函数将多个Observable的发射物结合到一起,基于这个函数的结果,为每个结合体发射单个数据项。
若两个Observable发射数据量不同,则只会截止到发射数据量最少的那个。
//连个Observable的数据项相加,输出的为 5,7,9, 不会再操作 4,5
Observable<Integer> odds = Observable.just(1,2,3,4,5);
Observable<Integer> evens = Observable.just(4,5,6);
Observable.zip(odds, evens, new BiFunction<Integer, Integer, Integer>() {
@Override
public Integer apply(Integer integer, Integer integer2) throws Exception {
return integer + integer2;
}
}).subscribe(s -> System.out.println(s));
combineLastest
Rxjava链接操作符
连接操作符 | 服用 |
---|---|
ConnectableObservable.connect | 指示一个可连接的Observable开始发射数据 |
Observable。publish | 将一个Observable转换为一个可连接的Observable |
Observable.replay | 确保所有订阅者开到相同的数据序列,即使他们在Observable开发发射数据之后才订阅 |