1.操作符列表
- startWith
- concatWith
- merge
- zip
2.操作符案例
2.1 startWith
说明
先发射 2和3,然后再通过startWith(1),最后输出 1, 2 3 .说明startWith中的内容先输出
例子
Observable.just(4)
.startWith(3)
.startWith(2)
.startWith(1)
.subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
Log.i(TAG, "accept: "+integer);
}
});
输出结果(先发射离订阅最近的一个startWith里面的内容)
I/MainActivity: accept: 1
I/MainActivity: accept: 2
I/MainActivity: accept: 3
I/MainActivity: accept: 4
2.1 concatWith
说明
和startWith相反,先执行发射的数据,然后再发射concatWith里面的数据
例子
如上诉,不特别举例了。
2.1 merge
合并操作符,合并多个操作符为一个数据源同时发送
例子
Observable<Long> interval1 = Observable.interval(0, 1, TimeUnit.SECONDS);
Observable<Long> interval2 = Observable.interval(0, 1, TimeUnit.SECONDS);
Observable.merge(interval1, interval2).subscribe(new Consumer<Long>() {
@Override
public void accept(Long aLong) throws Exception {
Log.i(TAG, "accept: "+aLong);
}
});
输出结果 (这里需要注意的是输出时间,都是同一时间发出的)
10-24 08:23:26.831 I/MainActivity: accept: 0
10-24 08:23:26.831 I/MainActivity: accept: 0
10-24 08:23:27.831 I/MainActivity: accept: 1
10-24 08:23:27.831 I/MainActivity: accept: 1
10-24 08:23:28.831 I/MainActivity: accept: 2
10-24 08:23:28.831 I/MainActivity: accept: 2
10-24 08:23:29.831 I/MainActivity: accept: 3
10-24 08:23:29.831 I/MainActivity: accept: 3
10-24 08:23:30.831 I/MainActivity: accept: 4
10-24 08:23:30.831 I/MainActivity: accept: 4
10-24 08:23:31.831 I/MainActivity: accept: 5
10-24 08:23:31.831 I/MainActivity: accept: 5
2.2 zip
说明
zip ,将上游所有的发射结果通过function处理以后统一返回给下游,比如一个页面需要调用多个接口才能渲染界面,则可以通过此方式处理
,当数据全部得到以后再次渲染界面。不用等到一个接口完成以后再次调用另一个接口
例子
Observable.zip(getIPAddress("www.baidu.com"), getIPAddress("www.sina.com"), new BiFunction<String, String, String>() {
@Override
public String apply(String s, String s2) throws Exception {
return "s1 " + s + ", s2 = " + s2;
}
}).subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
Log.i(TAG, "onSubscribe: ");
}
@Override
public void onNext(String s) {
Log.i(TAG, "accept: " + s);
}
@Override
public void onError(Throwable e) {
Log.i(TAG, "onError: "+e);
}
@Override
public void onComplete() {
Log.i(TAG, "onComplete: ");
}
});
输出结果
I/MainActivity: onSubscribe:
I/MainActivity: accept: s1 www.baidu.com => 180.101.49.12, s2 = www.sina.com => 115.238.192.240
I/MainActivity: onComplete: