RXJava

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

首先,咱们来看常规的代码app

//建立一个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);

  看到这里,大多数同窗仍是能够看明白的,由于这是很常规的代码,两个对象而已,没了ide

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

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

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

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");
    }
});

  上面两段代码的效果是彻底如出一辙的啊。只是写法简洁了不少,可是对于初学者来讲看起来就比较困难了 对象

 

  下面来看看justblog

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、it

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

  

  下面来看看 map 操做class

  

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 广州

相关文章
相关标签/搜索