首先还是附上大神写的博客:《给 Android 开发者的 RxJava 详解》作者扔物线。 网址:http://gank.io/post/560e15be2dca930e00da1083。
flatMap() 可以把传入的参数转化Observable 对象。
下面以一个非常简单的例子作为解释,怎样运用FlatMap();获取FlatMapModel里面Course的className。
FlatMapModel定义如下:
public class FlatMapModel {
private String name;
private String id;
private Course course;
public FlatMapModel(Course course, String id, String name) {
this.course = course;
this.id = id;
this.name = name;
}
public Course getCourse() {
return course;
}
public void setCourse(Course course) {
this.course = course;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Course定义如下:
public class Course {
private String id;
private String className;
public Course(String className, String id) {
this.className = className;
this.id = id;
}
public String getClassName() {
return className;
}
public void setClassName(String className) {
this.className = className;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
首先初始化一个FlatMapModel对象
final FlatMapModel model=new FlatMapModel(new Course("math","0"),"20103177","zpm");
常规的写法:
model.getCourse().getClassName();
采用flatMap:
final Observable observable= Observable.create(new Observable.OnSubscribe<FlatMapModel>(){
@Override
public void call(Subscriber<? super FlatMapModel> subscriber) {
subscriber.onNext(model);
}
});
observable.flatMap(new Func1<FlatMapModel,Observable<Course>>(){
@Override
public Observable<Course> call(final FlatMapModel flatMapModel) {
return Observable.create(new Observable.OnSubscribe<Course>(){
@Override
public void call(Subscriber<? super Course> subscriber) {
subscriber.onNext(flatMapModel.getCourse());
}
});
}
}).map(new Func1<Course,String>(){
@Override
public String call(Course course) {
return course.getClassName();
}
}).subscribe(new Subscriber<String>(){
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
Log.e("***********-----*",e.getMessage());
}
@Override
public void onNext(String s) {
//拿到了className
Log.i("--------------",s);
Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
}
});
这是什么鬼,明明一句话能解决的你却要这么一大段。这个例子主要是理解怎么使用FlatMap()。