4、rxjava基本原理map操作符

public class Main {

    public  static  void main(String[] args)
    {
        Observable.create(new ObservableOnSubscribe(){
            @Override
            public void subscribe(ObservableEmitter observableEmitter) {

                observableEmitter.onNext(12);
            }
        }).map(new Function() {
            @Override
            public String apply(Integer i) {
                return "模拟数字转换字符串"+i;
            }
        }).subscribe(new Observer(){
            @Override
            public void onNext(String str) {
                System.out.println(str);
            }
        });
    }
}

public abstract  class Observable {

    public static  Observable create(ObservableOnSubscribe source) {
        return new ObservableCreate(source);
    }


    public final  void subscribe(Observer observer)
    {
        subscribeActual(observer);
    }

    protected abstract void subscribeActual(Observer observer);


    public final  Observable map(Function  mapper) {
        return new ObservableMap(this, mapper);
    }
}

/**
 * Observalbe的实现类
 */
public class ObservableCreate extends Observable {
    private  ObservableOnSubscribe observableOnSubscribe;
    public ObservableCreate(ObservableOnSubscribe observableOnSubscribe)
    {
        this.observableOnSubscribe=observableOnSubscribe;
    }

    @Override
    protected void subscribeActual(Observer observer) {
        observableOnSubscribe.subscribe(new CreateEmitter(observer));
    }
}

public interface ObservableOnSubscribe {
    void subscribe(ObservableEmitter observableEmitter);
}

public interface ObservableEmitter {
    void onNext(T value);
}

public interface Function {

    R apply(T i);
}


public class ObservableMap extends Observable {

    private Function function;
    private Observable observable;

    public ObservableMap(Observable observable,Function function)
    {
        this.observable=observable;
        this.function=function;
    }
    @Override
    protected void subscribeActual(Observer observer) {
        //感觉是适配器模式
        observable.subscribe(new MapObserver(observer,function));
    }

    final  class MapObserver extends Observer{
        Observer observer;
        Function function;
        public MapObserver(Observer observer,Function function)
        {
            this.observer=observer;
            this.function=function;
        }

        @Override
        public void onNext(T str) {
           R r=function.apply(str);
           observer.onNext(r);
        }
    }
}

public abstract class Observer {


    public abstract void onNext(T str);

}


public class CreateEmitter implements ObservableEmitter{

    Observer observer;
    CreateEmitter(Observer observer)
    {
        this.observer=observer;
    }
    @Override
    public void onNext(T value) {

        observer.onNext(value);
    }
}

输出:


image.png

你可能感兴趣的:(4、rxjava基本原理map操作符)