RxAndroid与RxJava 变换
2015-12-27 18:17
225 查看
RxJava比较流弊除了线程调度之外,还比较流弊的的方面就是变换
变换:就是将事件中序列中的对象或者整个序列进行加工处理,转换成不同的事件或者事件序列.
看似复杂,简单说就是加工(如一个图片的路径加工得到一张图片)
例子:
以上通过id获取Drawable 将这种变换队形返回的,map() 事件对象的直接变换,这是比较常见的,不过RxJava还可以针对整个事件队列.
flatMap():他可以把传入的参数转换之后返回另外一个对象.
例子:
以上的逻辑是打印出了每个学生所选课程
以上我们可以看出,flatMap()和map()有一个相同点:它就是把传入的参数转换之后返回另外一个对象,但是需要注意,map和flatMap不同的,flatMap()中返回的是个Observable对象,并且这个Obserable对象并不是直接发送到了Subscriber的回调方法中
flatMap()的原理是这样的:1:使用传入的事件对象创建一个Observable对象;
2:并不发送这个Observable,而不是将他激活,于是他开始发送事件,
3:每一个创建出来的Obsevable发送的事件,都被汇入了同一个Observable,而这个Observable负责将这些事件同意交给Subsciber的回调方法,这三个步骤,把事件拆分成了两级,通过一组新创建的Observable将初始的对象[铺平]之后通过统一的路径分发下去,而这个[铺平]就是flatmap()所谓udefl;at
变换:就是将事件中序列中的对象或者整个序列进行加工处理,转换成不同的事件或者事件序列.
看似复杂,简单说就是加工(如一个图片的路径加工得到一张图片)
例子:
/** * 参数类型是drawable id 最终获得drawable图片 */ private void mapTest() { Observable.just(R.drawable.ic_launcher).map(new Func1<Integer, Drawable>() { @Override public Drawable call(Integer integer) { return getResources().getDrawable(integer); } }).subscribe(new Action1<Drawable>() { @Override public void call(Drawable drawable) { imageView.setImageDrawable(drawable); } }); /** * 这里出现了一个叫做Func1的类,它和Action1非常相似,也是RxJava的一个接口,用于包装含有 * 一个参数的方法,Func1与Action1的区别在于,Func1包装的是有返回值的方法,另外和Action一样,FuncX也有多个 * 用于不同参数的个数的方法, * FuncX与ActionX的区别在于是否含有返回值 */ }
以上通过id获取Drawable 将这种变换队形返回的,map() 事件对象的直接变换,这是比较常见的,不过RxJava还可以针对整个事件队列.
flatMap():他可以把传入的参数转换之后返回另外一个对象.
例子:
/** * 打印出每个学生所需要修的所有课程 */ private void flatMap() { Student[] stus = {new Student(1, 10001), new Student(2, 10002), new Student(3, 10003)}; Observable.from(stus).flatMap(new Func1<Student, Observable<Course>>() { @Override public Observable<Course> call(Student student) { return Observable.from(student.getCourses()); } }).subscribe(new Subscriber<Course>() { @Override public void onCompleted() { LogUtils.d("----->onCompleted:"); } @Override public void onError(Throwable e) { LogUtils.d("----->onError:" + e); } @Override public void onNext(Course course) { Toast.makeText(SixActivity.this, course.name, Toast.LENGTH_SHORT).show(); LogUtils.d("----->onNext:" + course.name); } }); }
以上的逻辑是打印出了每个学生所选课程
以上我们可以看出,flatMap()和map()有一个相同点:它就是把传入的参数转换之后返回另外一个对象,但是需要注意,map和flatMap不同的,flatMap()中返回的是个Observable对象,并且这个Obserable对象并不是直接发送到了Subscriber的回调方法中
flatMap()的原理是这样的:1:使用传入的事件对象创建一个Observable对象;
2:并不发送这个Observable,而不是将他激活,于是他开始发送事件,
3:每一个创建出来的Obsevable发送的事件,都被汇入了同一个Observable,而这个Observable负责将这些事件同意交给Subsciber的回调方法,这三个步骤,把事件拆分成了两级,通过一组新创建的Observable将初始的对象[铺平]之后通过统一的路径分发下去,而这个[铺平]就是flatmap()所谓udefl;at
相关文章推荐
- Android singleTask或singleInstance与startActivityForResult冲突解决
- Android之使用递归删除文件或文件夹
- android 系统短信数据库的查询与删除
- Android选择头像(从相机-相册-截图获取),以及闪退的解决
- Android中如何关闭所有的Activity
- 使用Android studio 提交代码无反应的处理办法
- Android之判断service是否处于运行状态
- Android在ImageView控件中图片怎样铺满整个控件
- Android自动化工具的选型对比
- android studio 下载地址
- Android 错误提示:Conversion to Dalvik format failed with error 1 解决办法
- android Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)
- Android中strings.xml中首字符或尾字符空格无作用
- android软件引导界面
- Android开发和測试实践 - 接入友盟统计
- android之旅12 activity之间的跳转与生命周期
- Android M 新的运行时权限开发者需要知道的一切
- android偏好设置
- Error:(2, 0) Plugin with id 'com.github.dcendents.android-maven' not found解决办法
- Android Design Support Library(一)用TabLayout实现类似网易选项卡动态滑动效果