Rxjava变换过滤操作符

目录
(一):Rx简介
(二):Rxjava基础知识
(三):Rxjava创建操作符
(四):Rxjava的线程操作
(五):变换和过滤操作符

变换操作符

rxjava中的变换操作符包括:

操作符作用
map对序列的每一项都用一个函数来变换Observable发射的数据序列
flatmap将Observable发射的数据集合变换为Observables集合,然后将这些Observable发射的数据放入一个单独的Observable中
switchMap将Observable发射的数据集合变换为Observables集合,然后只发射这些Observables最近发射的数据
scan对Observable发射的每一项数据应用一个函数,然后按照顺序依次发射每一个值
groupBy将Observable拆分为Observable集合,将原始Observable发射的数据按key分组,每一个Observable发射一组不同的数据
buffer定期从Observable收集数据到一个集合,然后把这些数据结合打包发射,而不是一次发射一个
window定期将来自Observable的数据拆分成一些Observable窗口,然后发射这些窗口,而不是每次发射一项
cast在发射之前强制将Observable发射的所有数据转换为指定的类型
map

map对Observable发射的每一项数据应用一个函数,执行变换操作,然后返回一个发射变换后结果的Observable。

Observable.just("TIAN")
   .map(s -> s.toLowerCase())
   .subscribe(s -> System.out.println(s));
flatmap

flatmap与map表现类似,但是它实际是将原始Observable发射的数据的每一项进行变化获得一个Observable,再将每一项获得的Observable发射的数据合并后形成又一个Observable,发着这些合并的数据。

groupBy

可以理解为分组,将一个Observable拆分为一些集合,他们中的每一个Observable都发射原始Observable的子数据。

Observable.range(1,8)
       .groupBy(integer -> (integer % 2 == 0)? "偶数组": "奇数组")
        .subscribe(s -> System.out.println("group name : " + s.getKey()));
//输出为  group name : 奇数组
//group name : 偶数组
buffer

定期收集Observable数据并放入一个数据集中,将原有的Observable变换为另一个Observable,新的Observable发射这个数据集。

Observable.range(1,8)
      .buffer(4)
      .subscribe(s -> System.out.println("onNext : " + s));
//执行的结果
//onNext : [1, 2, 3, 4]
//onNext : [5, 6, 7, 8]
window

定期会将原始的Observable的数据分解为一个Observable,发射这些Observable,而不是每次发射一项数据,

Observable.range(1,8)
                .window(4)
                .subscribe(s -> {
                    System.out.println("onNext");
                    s.subscribe(t -> System.out.print(t));
                });
输出结果为:
onNext1234
onNext5678

过滤操作符

操作符作用
filter过滤数据
takeLast只发射最后的几项数据
last只发射最后一项数据
lastOrDefault只发射最后一项数据,若Observable为null,则发射默认值
takeLastBuffer将最后N项数据当做单个数据发射
skip跳过开始的N项数据
skiplast跳过最后的N项数据
take只发射开始的N项数据
first只发射第一项数据
firstOrDefault只发射第一项数据, 若Observable为null,则发射默认值
elementAt发射第N项数据 ,相当于数组中的index
elementAtOrDefault发射第N项数据,若Observable为null,发射默认值
sample定期发射Observable最近的数据
throttleFirst定期发射Observable发射的第一项数据
throttleWithTimeOut只有当Observable在指定的时间段后还没有发射数据时,才发射一个数据
timeout如果在指定的时间段后还没有发射数据,就发射一个异常
distinct过滤掉重复的数据
distinctUntilChanged过滤掉连续重复的数据
ofType只发射指定类型的数据
ignoreElements丢弃所有正常数据,只发射错误或完成通知。
first last

只发射第一项数据。 只发射最后一项数据。

//结果输出为:   onNext : 1
        Observable.range(1,8)
                .first(1)
                .subscribe(s -> {
                    System.out.println("onNext: " + s);
                });
take takelast

只发射前面N项数据, 只发射后面n项数据

//结果输出为:   onNext : 7  onNext:8
        Observable.range(1,8)
                .takeLast(2)
                .subscribe(s -> {
                    System.out.println("onNext: " + s);
                });
skip skipLast

observable跳过发射的前N项数据。 跳过发射的后N项数据。

Observable.range(1,8)
     .skip(2)
     .subscribe(s -> System.out.println("onNext: " + s));


Observable.interval(1, TimeUnit.SECONDS)
     .skip(5, TimeUnit.SECONDS)  //这里的5表示时间,表示忽略5秒之前发送的数据,接受后期的数据。
     .subscribe(s -> System.out.println("onNext: " + s));
distinct filter
//这里输出的是1,2,34,5
Observable.just(1,2,3,2,4,2,5,2).distinct().subscribe(s -> System.out.println(s));
//根据条件过滤数据,输出 3,4,5
Observable.just(1,2,3,2,4,2,5,2).filter(integer -> integer > 2)
    .subscribe(s -> System.out.println(s));
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值