map
在使用map之前要先说道一个接口:Func1,Func1和上一篇提到的Action1相似。Func1 和 Action的区别在于, Func1 包装的是有返回值的方法。
接下来就是map的用法,看代码更直观点;
Observable.just(student,student2,student3)
.map(new Func1<Student, String>() {
@Override
public String call(Student student) {
String name=student.getName();
return name;
}
})
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
Logger.d(s);
list.add(s);
}
});
Student对象转换为String类型
map可以起到一个转换的作用,map可以多次使用
Observable.just("a","b")
.map(new Func1<String, Integer>() {
@Override
public Integer call(String s) {
return s.hashCode();
}
})
.map(new Func1<Integer, String>() {
@Override
public String call(Integer integer) {
return integer.toString();
}
})
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
Logger.d(s);
}
});
flatMap
flatMap是一个比教难理解的一个转换,在这里先假设一个需求,需要打印多个Student所学的课程。这跟之前获取Student的name又不同了,这里先确定一下关系,一个Student类中只有一个name,而一个Student却有多门课程(Course)
这里写代码片
Observable.just(student,student1)
.flatMap(new Func1<Student, Observable<Course>>() {
@Override
public Observable<Course> call(Student student) {
return Observable.from(student.getCourseList());
}
})
.subscribe(new Action1<Course>() {
@Override
public void call(Course course) {
Logger.d(course.getCoursename());
}
});
自己的理解:
flatMap新生成了一个Observable对象,返回的所有课程作为再次被观察的对象集合,有两个被观察的对象,订阅返回单个Course对象
有不合理的地方欢迎各位大神指出,谢谢