Rxjava之FlatMap()的運用

首先還是附上大神寫的博客:《給 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()。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章