RxJava基础操作符 lift 与 compose区别

public interface Operator extends Func1, Subscriber> {
	// cover for generics insanity
}
lift(Operator operator)//用来转换Subscriber

public interface Transformer extends Func1, Observable> {
	// cover for generics insanity
}
compose(Transformer transformer)//用来转换Observable,如bindUtilEvent


.compose(this.getCompose5())
.lift(this.toList())

 private Operator, ? super Integer> toList() {
        return new Operator, Integer>() {
            @Override
            public Subscriber call(final Subscriber> oldSubscriber) {//参数是被转换前的Subscriber,经过以下装饰包装转换,变成新的Subscriber
                return new Subscriber() {//中间新插入的Subscriber,会被上一层级的Subscriber调用,再调用参数Subscriber,像链表一样,上下衔接上了
                    ArrayList list = new ArrayList<>();
                    boolean isComplete;

                    @Override
                    public void onCompleted() {
                        Log.e("CacheManager", "toList  onCompleted  ---- test  ");
                        if (!isComplete) {
                            isComplete = true;
                            oldSubscriber.onNext(list);
                        }
                        oldSubscriber.onCompleted();
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("CacheManager", "toList  onError  ---- test  " + e.getMessage());
                        oldSubscriber.onError(e);
                    }

                    @Override
                    public void onNext(Integer integer) {
                        Log.e("CacheManager", "toList onNext  ----   " + integer);
                        if (!isComplete) {
                            list.add("list " + integer);
                        }
                    }
                };
            }
        };
    }

    private  Transformer getCompose5() {
        return new Transformer() {
            @Override
            public Observable call(Observable OldObservable) {//参数是之前的转换前的Observable,通过以下的装饰包装,变成带有新特性的Observable
                Log.e("CacheManager", "compose : getCompose5  ---- call  " + OldObservable);
                return OldObservable.map(new Func1() {
                    @Override
                    public String call(T t) {
                        return t.toString() + "  __nimei";
                    }
                });
            }
        };
    }


你可能感兴趣的:(Android,Android框架)