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()。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值