rxJava基础之八--事件变换
来源:互联网 发布:vb小游戏制作 编辑:程序博客网 时间:2024/04/30 07:59
map():解决单一的事件变换
Observable.just("images/meinv.png") // 输入类型 String
.map(new Func1<String, Bitmap>() {
@Override
public Bitmap call(String filePath) { // 参数类型 String
return getBitmapFromPath(filePath); // 返回类型 Bitmap
}
})
.subscribe(new Action1<Bitmap>() {
@Override
public void call(Bitmap bitmap) { // 参数类型 Bitmap
showBitmap(bitmap);
}
});
flatMap():解决嵌套的事件变换(用map()就需要在subscriber里面用for循环拿出数据),也可以不用指定线
程而执行联网请求异步代码
(1)解决嵌套的事件变换:
如果有一个需求,输出每个学生的名字:
输入名字的代码:
public class MainActivity extends Activity {
protected static final String TAG = "MainActivity";
private List<Student> stus = new ArrayList<Student>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init4();
}
private void init4() {
// 遍历出每个学生的名字,这种没有嵌套的就直接输出
Observable.from(stus).map(new Func1<Student, String>() {
@Override
public String call(Student arg0) {
return arg0.name;
}
}).subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable arg0) {
}
@Override
public void onNext(String arg0) {
Log.i(TAG, arg0);
}
});
}
}
但是如果需求改成输出每个学生的课程名字:
Observable.from(stus).subscribe(new Subscriber<Student>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable arg0) {
}
@Override
public void onNext(Student stu) {
List<Course> courses = stu.getCourses();
for (int i = 0; i < courses.size(); i++) {
Course course = courses.get(i);
Log.d(TAG, course.getName());
}
}
});
但是这里不想在subscriber里面进行循环操作。所以就用faltMaop的来处理嵌套问题:
Subscriber<Course> subscriber = new Subscriber<Course>() {
@Override
public void onNext(Course course) {
Log.d(tag, course.getName());
}
...
};
Observable.from(students)
.flatMap(new Func1<Student, Observable<Course>>() {
@Override
public Observable<Course> call(Student student) {
//跟for(Stuent stu : Studnets)是一个意思
return Observable.from(student.getCourses());
}
})
.subscribe(subscriber);
- rxJava基础之八--事件变换
- jQuery学习笔记之八----基础事件
- RxJava之基础入门
- RxJava操作符总结之变换
- RxJava操作符总结之变换
- RxJava变换
- RxJava 事件流之聚合
- RxJava 事件流之聚合
- RxJava 事件流之聚合
- OpenGL基础图形编程(八)变换
- 了解RxJava之基础(一)
- Java基础之八
- Linux基础之八
- RxJava系列之二 变换类操作符详解1
- RxJava之lift()变换原理及实现自定义 Operator
- RxJava 源码分析之 —— lift 变换
- RxJava的学习之变换操作符—map
- RxJava的学习之变换操作符—flatMap
- Velocity初探小结--velocity使用语法详解
- KVO整理总结
- hibernate的hql查询语句总结
- SSL/TLS 受诫礼(BAR-MITZVAH)攻击漏洞(CVE-2015-2808)
- Qt 像VS一样建立解决方案(Qt 子项目)
- rxJava基础之八--事件变换
- Java基础(一):抽象类与接口的区别
- Android关于Theme.AppCompat相关问题的深入分析
- 关于C语法需要加强理解的一下概念
- WOT2016欧阳辰:小米程序化广告交易平台(MAX)的架构实践
- 僵尸进程以及wait和waitpid函数
- SQLCookBook第四章学习日记13
- 第十二周OJ——汉诺塔
- SSL/TLS LogJam中间人安全限制绕过漏洞 (CVE-2015-4000)