RxJava操作符
来源:互联网 发布:淘宝托管公司被骗18万 编辑:程序博客网 时间:2024/04/30 02:29
RxJava操作符类型分为:创建操作符、变换操作符、过滤操作符、组合操作符、错误处理操作符、条件和布尔操作符、算术和聚合操作符及连接操作符等,官方文档:http://reactivex.io/RxJava/javadoc/
1.创建操作符:create、just、from、defer、range、interval、start、repeat、timer等
Interval操作符返回一个Observable,它按固定的时间间隔发射一个无限递增的整数序列 Observable.interval(3,TimeUnit.SECONDS) //每隔3秒调用onNext方法,并让onNext方法在主线程中运行 .observeOn(AndroidSchedulers.mainThread()) .subscribe(subscriber); Subscriber subscriber = new Subscriber<Long>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Long aLong) { Log.d("TAG",Thread.currentThread().getName()); Log.d("TAG","onNext: "+aLong.intValue()); textView.setText(""+aLong.intValue()); } }; //取消订阅 subscriber.unsubscribe();
2、变换操作符:对Observable发射的数据按照一定规则做一些变换操作,然后将变换后的数据发射出去,有map、flatMap、concatMap、switchMap、flatMapIterable、buffer、groupby、cast、window、scan等。
map:通过指定一个Func对象,将传入的对象转换为一个新的对象并发射,观察者将收到新的对象处理。
Observable.just(R.drawable.aries) .map(new Func1<Integer,Bitmap>() { @Override public Bitmap call(Integer integer) { return getBitmapFromPath(integer); } }) .subscribe(new Action1<Bitmap>() { @Override public void call(Bitmap bitmap) { image.setImageBitmap(bitmap); } });private Bitmap getBitmapFromPath(int s) { return BitmapFactory.decodeResource(getResources(),s);}
可以看到在just方法中传入的是int类型的对象,在经过map方法转换后将原本应该发射的int类型的对象转化为Bitmap类型的对象发射给subscriber(观察者)。
flatMap:将Observable发射的数据集合转换为新的Observable数据集合,然后将这些发射的数据平坦化的放进一个单独的Observable
List<String> list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add("5");final String host = "数字的值是:";Action1 action = new Action1<String>() { @Override public void call(String s) { Log.d("TAG",s); }};Observable.from(list) .flatMap(new Func1<String, Observable<?>>() { @Override public Observable<?> call(String s) { return Observable.just(host+s); } }) .subscribe(action);
3.过滤操作符:主要用于过滤和选择Observable发射的数据序列,让Observable只返回满足我们条件的数据,包含:filter、elementAt、distinct、skip、throttleFirst等。
filter:对源Observable产生的结果根据自定义规则进行过滤,只有满足调条件的结果才会提交给订阅者
List<String> list = new ArrayList<>(); list.add("1"); list.add("2"); list.add("3"); list.add("4"); list.add("5");Observable.from(list).filter(new Func1<String, Boolean>() { @Override public Boolean call(String s) { return s.equals("2"); }}).subscribe(new Action1<String>() { @Override public void call(String s) { Log.d("TAG","filter:"+s); }});
throttleFirst:定期发射这个时间段里源Observable发射的第一个数据
Observable.create(new Observable.OnSubscribe<Integer>() { @Override public void call(Subscriber<? super Integer> subscriber) { for(int i = 0;i<10;i++){ subscriber.onNext(i); try { Thread.sleep(100); }catch (InterruptedException e) { e.printStackTrace(); } } subscriber.onCompleted(); }}).throttleFirst(200,TimeUnit.MILLISECONDS).subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { Log.d("TAG","throttleFirst:"+integer); }});
每隔100ms发射一个数据,throttleFirst操作符设定的时间是200ms,因此它会发射每个200ms内的第一个数据
4.条件操作符:amb、defaultIfEmpty、skipUntil、skipWhile、takeUntil和takeWhile等
amb:对于给定两个或多个Observable,它只发射首先发射数据或通知的那个Observabe的所有数据
Observable.amb(Observable.just(1,2,3).delay(2,TimeUnit.MILLISECONDS),Observable.just(4,5,6)).subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { Log.d("TAG","amb:"+integer); }});
- [RxJava笔记]RxJava操作符
- RxJava 操作符 combineLatest
- RxJava 操作符 concat
- RxJava 操作符 interval
- RxJava 操作符 take
- RxJava操作符 reduce
- RxJava操作符学习
- RxJava defer操作符
- RXJAVA操作符
- RxJava 的操作符
- RxJava 操作符分类
- RxJava操作符
- RxJava操作符-subscribeOn
- RxJava 组合操作符
- RxJava-过滤操作符
- RxJava转换操作符
- RxJava过滤操作符
- RxJava组合操作符
- 深度学习在图像检索的应用
- 前端测试
- C++输出流名字重命名,代码重用
- 常用图像库整理
- 多级指针避免野指针
- RxJava操作符
- ajax+servlet实现百度智能小搜索框———慕课课程
- format() in python
- 两倍
- js中正则表达式的常用方法和引用
- 怎么查看调用栈关系
- 图像检索:基于内容的图像检索技术
- 2017"百度之星"程序设计大赛
- 纪中集训d2 提高A组模拟