RxJava—过滤操作符

本文介绍了RxJava中的过滤操作符,包括Filter、Take、TakeLast、TakeUntil、Skip、SkipLast、ElementAt、Debounce、DistinctUntilChange、First和Last等。通过实例展示了如何根据条件过滤数据,获取满足特定条件的事件。
摘要由CSDN通过智能技术生成

1.前言

       在前一篇文章中向大家介绍了转换操作符,如果对转换操作符不是很清楚的建议可以去看一下RxJava—转换操作符。那么在这一章中我们就来介绍RxJava中的过滤操作符,顾名思义过滤操作符主要就是对事件数据根据相应的条件进行过滤,只返回满足过滤条件的数据,过滤操作符主要包括:Filter()、Take()、TakeLast()、TakeUntil()、Skip()、SkipLast()、ElementAt()、Debounce()、 DistinctUntilChange()、First()、Last()等。

2.过滤操作符的使用

(1)Filter

       filter(Func1)用来过滤被观察者中我们不想要的数据,只返回满足条件的值。

       根据官方给出的原理图:

       

       还是用上一篇文章的数据来进行演示,这个时候我需要得到班级里所有男生的学号和姓名,我们可以这样实现:

Observable.from(studentList)
        .filter(new Func1<Student, Boolean>()
        {
            public Boolean call(Student student)
            {
                return "男".equals(student.getGender());
            }
        })
        .subscribe(new Action1<Student>()
        {
            public void call(Student student)
            {
                Log.d("filter", "学号:" + student.getNumber()
                        + "  姓名:" + student.getName());
            }
        });
       从上面的代码中可以看出Func1的两个参数分别表示的是Observable的发射值的类型和是否返回Observable的发射值,当为true时就是要返回发射值,当为false时就是过滤数据,不返回发射值。当点击按钮后在控制台上,可以看到这样的结果:


(2)Take

       take(int)用一个整数n作为一个参数,从原始的序列中发射前n个元素。

       根据官方给出的原理图:


       现在我们需要获取到班级里的前5个学生的学号和姓名,我们可以这样实现:
 Observable.from(studentList)
        .take(5)
        .subscribe(new Action1<Student>()
        {
            public void call(Student student)
            {
                Log.d("Take", "学号:" + student.getNumber()
                        + "  姓名:" + student.getName());
            }
        });
       从上面的代码中可以看出take()中的参数是多少就代表发射数据源的前多少项数据 当点击按钮后在控制台上,可以看到这样的结果:


(3)TakeLast
       takeLast(int)同样用一个整数n作为参数,只不过它发射的是观测序列中后n个元素。

       根据官方给出的原理图:

              
       现在我们需要获取到班级里的后3个学生的学号
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值