Android函数响应式编程——必学的RxJava组合操作符startWith、merge、concat、zip、combineLastest
1.startWith:给你被观察者的数据流前再增加一点同类型的数据,这里增加的是1,2
rx.Observable.just(3, 4, 5).startWith(1, 2) .subscribe(new Action1() { @Override public void call(Integer integer) { Log.i("xbh", integer + ""); } });
输出
12-09 07:17:18.439 18450-18450/com.hdu.a15058124.homework3 I/xbh: 1
12-09 07:17:18.439 18450-18450/com.hdu.a15058124.homework3 I/xbh: 2
12-09 07:17:18.439 18450-18450/com.hdu.a15058124.homework3 I/xbh: 3
12-09 07:17:18.439 18450-18450/com.hdu.a15058124.homework3 I/xbh: 4
12-09 07:17:18.439 18450-18450/com.hdu.a15058124.homework3 I/xbh: 5
2.merge:把多个被观察者合并到一个被观察者身上一起输出,但是可能会让合并的被观察者发射的数据交错。
rx.Observableobs1 = rx.Observable.just(1,2,3).subscribeOn(Schedulers.io());rx.Observable obs2 = rx.Observable.just(4,5,6);rx.Observable.merge(obs1,obs2).subscribe(new Action1 () { @Override public void call(Integer integer) { Log.i("xbh", integer + ""); }});
输出
12-09 07:18:35.919 19718-19718/? I/xbh: 4
12-09 07:18:35.919 19718-19718/? I/xbh: 5
12-09 07:18:35.919 19718-19718/? I/xbh: 6
12-09 07:18:35.921 19718-19758/? I/xbh: 1
12-09 07:18:35.921 19718-19758/? I/xbh: 2
12-09 07:18:35.921 19718-19758/? I/xbh: 3
3.concat:也是合并数据,但是严格按照顺序发射,一个被观察者数据发送完前不会发送后一个被观察者的数据。
rx.Observableobs1 = rx.Observable.just(1,2,3).subscribeOn(Schedulers.io());rx.Observable obs2 = rx.Observable.just(4,5,6);rx.Observable.concat(obs1,obs2).subscribe(new Action1 () { @Override public void call(Integer integer) { Log.i("xbh", integer + ""); }});
12-09 07:22:43.374 23503-23554/com.hdu.a15058124.homework3 I/xbh: 1
12-09 07:22:43.374 23503-23554/com.hdu.a15058124.homework3 I/xbh: 2
12-09 07:22:43.374 23503-23554/com.hdu.a15058124.homework3 I/xbh: 3
12-09 07:22:43.374 23503-23554/com.hdu.a15058124.homework3 I/xbh: 4
12-09 07:22:43.374 23503-23554/com.hdu.a15058124.homework3 I/xbh: 5
12-09 07:22:43.374 23503-23554/com.hdu.a15058124.homework3 I/xbh: 6
4.zip合并多个被观察者发出的数据项,但是如果一个被观察者的数据更多,多出来的那部分不会被发送。
rx.Observableobs1 = rx.Observable.just(1,2,3,4,5);rx.Observable obs2 = rx.Observable.just("a","b","c");rx.Observable.zip(obs1,obs2,new Func2 ,String,String>() { @Override public String call(Integer integer, String s) { return integer + s; }}).subscribe(new Action1 () { @Override public void call(String s) { Log.i("xbh", s); }});
输出:
12-09 07:28:28.115 28857-28857/com.hdu.a15058124.homework3 I/xbh: 1a
12-09 07:28:28.115 28857-28857/com.hdu.a15058124.homework3 I/xbh: 2b
12-09 07:28:28.115 28857-28857/com.hdu.a15058124.homework3 I/xbh: 3c
5.combineLatest:把第一个被观察者最新的数据,和另外的观察者相连。
rx.Observableobs1 = rx.Observable.just(1,2,3,4,5,6,7,8,9);rx.Observable obs2 = rx.Observable.just("a","b","b");rx.Observable.combineLatest(obs1,obs2,new Func2 ,String,String>() { @Override public String call(Integer integer, String s) { return integer + s; }}).subscribe(new Action1 () { @Override public void call(String s) { Log.i("xbh", s); }});
输出:
12-09 07:29:14.421 29655-29655/? I/xbh: 9a
12-09 07:29:14.421 29655-29655/? I/xbh: 9b
12-09 07:29:14.421 29655-29655/? I/xbh: 9b
更多相关文章
- android-market-api
- 数据存储之SharedPreferences存储——第一行代码Android学习笔记
- Bundle使用心得
- [转载]Android(安卓)ContentProvider和Uri详解 (绝对全面)
- android 用gpio作为pwm输出控制led背光
- 【技术直通车】Spatialite for Android编译及测试
- android JSON解析数据 android解析天气预报
- android fragment于fragment之间通信
- Android(安卓)Arch LifeCycle用法详解与源码解析