Fwl的小花园

  博客园 :: 首页 :: 博问 :: 闪存 :: :: 联系 :: :: 管理 ::

对于大多数初学者来说,看到RxJava的代码是懵逼的,我也一样,特别是链式的代码,一看就懵逼,最近,稍微搞清楚了一点,以此小记一番:

首先,我们来看常规的代码

//创建一个Observable<可观察的对象>:
public static Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
    @Override
    public void subscribe(ObservableEmitter<String> emitter) throws Exception {
        emitter.onNext("hello");
        emitter.onComplete();
    }
});
//创建一个Observer<观察者>
public static Observer observer = new Observer<String>() {
    @Override
    public void onSubscribe(Disposable d) {
        System.out.println("observer-->onSubscribe");
    }

    @Override
    public void onNext(String value) {
        System.out.println("observer-onNext->"+value);
    }
    @Override
    public void onError(Throwable e) {
        System.out.println("observer-->onError");
    }
    @Override
    public void onComplete() {
        System.out.println("observer-->onComplete");
    }
};
//可观察者和观察者之间建立联系
observable.subscribe(observer);

  看到这里,大多数同学还是可以看明白的,因为这是很常规的代码,两个对象而已,没了

  这段代码的输出的结果是:

observer-->onSubscribe
observer-onNext->hello
observer-->onComplete

  然后变一个样式,链式的时候是这样的

Observable.create(new ObservableOnSubscribe<String>() {
    @Override
    public void subscribe(ObservableEmitter<String> emitter) throws Exception {
        emitter.onNext("2");
        emitter.onComplete();
    }
}).subscribe(new Observer<String>() {
    @Override
    public void onSubscribe(Disposable d) {
        System.out.println("observer-->onSubscribe");
    }

    @Override
    public void onNext(String value) {
        System.out.println("observer-onNext->" + value);
    }

    @Override
    public void onError(Throwable e) {
        System.out.println("observer-->onError");
    }

    @Override
    public void onComplete() {
        System.out.println("observer-->onComplete");
    }
});

  上面两段代码的效果是完全一模一样的啊。只是写法简洁了很多,但是对于初学者来说看起来就比较困难了 

 

  下面来看看just

Observable.just("hello").subscribe(new Observer<String>() {
    @Override
    public void onSubscribe(Disposable d) {
        System.out.println("observer-->onSubscribe");
    }

    @Override
    public void onNext(String value) {
        System.out.println("observer-onNext->" + value);
    }

    @Override
    public void onError(Throwable e) {
        System.out.println("observer-->onError");
    }

    @Override
    public void onComplete() {
        System.out.println("observer-->onComplete");
    }
});

  这段代码,看起来是不是似曾相识的感觉,Observable 的 create 方法返回的是一个 Onservable对象, 同样的,just 方法也是返回的也是一个 Observable、

  这就很明白了,而两者的区别就是:Just是现有的数据,不用做处理,用 create 的方法,可以在 subscribe 里面做一些操作,包括对数据的处理等,最后调用 onNext 的时候把相应的数据发送出去

  

  下面来看看 map 操作

  

Observable.create(new ObservableOnSubscribe<String>() {
    @Override
    public void subscribe(ObservableEmitter<String> emitter) throws Exception {
        emitter.onNext("2");
        emitter.onComplete();
    }
}).map(new Function<String, Integer>() {
    //map基本作用就是将一个Observable通过某种函数关系,转换为另一种Observable,
    //这个例子中就是把我们的String数据变成了Integer类型
    @Override
    public Integer apply(String s) throws Exception {
        return Integer.parseInt(s);
    }
}).subscribe(new Observer<Integer>() {
    @Override
    public void onSubscribe(Disposable d) {
        System.out.println("observer-->onSubscribe");
    }

    @Override
    public void onNext(Integer value) {
        System.out.println("observer-onNext->" + value);
    }

    @Override
    public void onError(Throwable e) {
        System.out.println("observer-->onError");
    }

    @Override
    public void onComplete() {
        System.out.println("observer-->onComplete");
    }
});

  这个和第二段代码的区别是,里面多了一个map的操作,你点击 map 进去你就会发现, map 也是返回的是一个 Observable 对象

  这个例子中,看最后的 subscribe 的时候 Observer 的类型也相应的变化了,由原来的 String  类型变成了 Integer 类型

  没错,这就是map的操作,map的作用就是使 Obasevable 的类型发生变化

  这里要注意的是 Function 的第一个参数是原来Observable的对象的类型,而第二个参数是经过转换后的Observable的类型,可以粗略的理解成方法入参和返回值吧

 

 

 

暂且记叙到这里:2017-11-15 22:50 广州

 

posted on 2017-10-13 14:55  Fwl的小花园  阅读(166)  评论(0编辑  收藏  举报