Rxjava 转换操作符

buffer:在时间间隔内缓存结果,类似于buffer缓存一个list集合,区别在于window将这个结果集合封装成了list,详解

window:在时间间隔内缓存结果,类似于buffer缓存一个list集合,区别在于window将这个结果集合封装成了observable,详解

scan:遍历源Observable产生的结果,再按照自定义规则进行运算,依次输出每次计算后的结果给订阅者,call回调第一个参数是上次的结算结果,第二个参数是当此源observable的输入值,注意:当执行源observable输入的第一个时,并不会回调call函数,也就是说第一次并不参与运算,直接输给订阅者

Observable.range(1, 10).scan(new Func2<Integer, Integer, Integer>() {
    @Override
    public Integer call(Integer sum, Integer integer) {
        Log.e(TAG,"------->sum:" + sum + "   integer:" + integer);
        return sum + integer;
    }
}).subscribe(new Observer<Integer>() {
    @Override
    public void onCompleted() {
        Log.e(TAG,"------>onCompleted()");
    }

    @Override
    public void onError(Throwable e) {
        Log.e(TAG,"------>onError()" + e);
    }

    @Override
    public void onNext(Integer integer) {
        Log.e(TAG,"------>onNext()" + integer);
    }
});
03-16 15:00:00.202 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()1
03-16 15:00:00.202 23775-23775/com.iwith.smart E/RxjavaActivity: ------->sum:1   integer:2
03-16 15:00:00.203 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()3
03-16 15:00:00.203 23775-23775/com.iwith.smart E/RxjavaActivity: ------->sum:3   integer:3
03-16 15:00:00.203 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()6
03-16 15:00:00.203 23775-23775/com.iwith.smart E/RxjavaActivity: ------->sum:6   integer:4
03-16 15:00:00.203 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()10
03-16 15:00:00.203 23775-23775/com.iwith.smart E/RxjavaActivity: ------->sum:10   integer:5
03-16 15:00:00.203 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()15
03-16 15:00:00.204 23775-23775/com.iwith.smart E/RxjavaActivity: ------->sum:15   integer:6
03-16 15:00:00.204 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()21
03-16 15:00:00.204 23775-23775/com.iwith.smart E/RxjavaActivity: ------->sum:21   integer:7
03-16 15:00:00.204 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()28
03-16 15:00:00.204 23775-23775/com.iwith.smart E/RxjavaActivity: ------->sum:28   integer:8
03-16 15:00:00.204 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()36
03-16 15:00:00.204 23775-23775/com.iwith.smart E/RxjavaActivity: ------->sum:36   integer:9
03-16 15:00:00.204 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()45
03-16 15:00:00.205 23775-23775/com.iwith.smart E/RxjavaActivity: ------->sum:45   integer:10
03-16 15:00:00.205 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onNext()55
03-16 15:00:00.205 23775-23775/com.iwith.smart E/RxjavaActivity: ------>onCompleted()
cast:在发射之前强制将Observable发射的所有数据转换为指定类型

public void cast() {
    List<Person> list = new ArrayList<>();
    for (int i = 0; i < 30; i++) {
        list.add(new Male(true, "i" + i));
    }
    Observable.from(list).cast(Male.class).subscribe(new Subscriber<Male>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(Male s) {
            Log.i(tag, "name:" + s.name + "\n hasJJ:" + s.hasJJ);
        }
    });
}

class Person {
    String name;

    public Person(String name) {
        this.name = name;
    }
}

class Male extends Person {
    public boolean hasJJ;

    public Male(boolean hasJJ, String name) {
        super(name);
        this.hasJJ = hasJJ;
    }
}
//多态,我们用Person接收Male对象,然后通过cast转成Male类型。有点instanceof的意思。
Map:将一个数据类型转成另一种数据类型

Observable.just(1,55,99,33)
        .map(new Func1<Integer, Student>() {
            @Override
            public Student call(Integer integer) {
                return new Student(integer,null);
            }
        })
        .subscribe(new Action1<Student>() {
            @Override
            public void call(Student student) {
                Log.e(TAG,student.toString());
            }
        });
03-16 15:22:28.421 23775-23775/com.iwith.smart E/RxjavaActivity: Student{name=1, mList=null}
03-16 15:22:28.421 23775-23775/com.iwith.smart E/RxjavaActivity: Student{name=55, mList=null}
03-16 15:22:28.421 23775-23775/com.iwith.smart E/RxjavaActivity: Student{name=99, mList=null}
03-16 15:22:28.421 23775-23775/com.iwith.smart E/RxjavaActivity: Student{name=33, mList=null}
concatMap:是将源Observable转换成对各操作符,然后又链接返回给源Observable,这与flatMap十分相似,最大的区别:concatMap 是保证结果的顺序性,就是顺序与输入一致.详解

switchMap()和flatMap()很像,除了一点:当源Observable发射一个新的数据项时,如果旧数据项订阅还未完成,就取消旧订阅数据和停止监视那个数据项产生的Observable,开始监视新的数据项.详解


compose:详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值