RXJava入门03

RXJava数据传输过滤操作

在被观察者发送数据给观察者的时候,在数据传输的时候,有可能需要对数据进一步过滤。以下的教程揽括了大部分过滤操作的函数。

1.过滤重复选项的Distinct方法

private static ArrayList initStudents() {
        ArrayList<Student> persons = new ArrayList<>();
        persons.add(new Student("张三", 17));
        persons.add(new Student("张三", 22));
        persons.add(new Student("李四", 18));
        persons.add(new Student("王五", 19));
        return persons;
    }

    public static class Student {
        public String name;
        public int age;

        public Student(String name, int age) {
            this.name = name;
            this.age = age;
        }

        @Override
        public String toString() {
            return "Student{" +
                    "name='" + name + '\'' +
                    ", age=" + age +
                    '}';
        }
    }
public static void test10() {
        Observable
                .from(initStudents())
                .distinct(new Func1<Student, String>() {
                    @Override
                    public String call(Student o) {

                        return o.name;
                    }
                })
                .subscribe(new Action1() {
                    @Override
                    public void call(Object o) {
                        Log.e("TAG", "call :" + o);
                    }
                });
    }
2.Filter方法过滤指定条件的数据
public static void test9() {
        // 需求:从1打印到9大于5的数字
        Observable
                .range(1, 9)
                .filter(new Func1<Integer, Boolean>() {
                    @Override
                    public Boolean call(Integer integer) {
                        return integer > 5;
                    }
                })
                .subscribe(new Action1<Integer>() {
                    @Override
                    public void call(Integer integer) {
                        Log.e("TAG", "call: " + integer);
                    }
                });
    }
3.获取队列中某些数据First&Last&ElementAt
 public static void test10() {
        Observable
                .from(initStudents())
                .distinct(new Func1<Student, String>() {
                    @Override
                    public String call(Student o) {

                        return o.name;
                    }
                })
                //.first()// 获取第一个元素
                //.last() // 获取最后一个元素
                .elementAt(1)// 指定索引位置(索引越界就会报出异常)
                .subscribe(new Action1() {
                    @Override
                    public void call(Object o) {
                        Log.e("TAG", "call :" + o);
                    }
                });
    }
4.获取指定集合的数据Take&TakeLast
public static void test11() {
        // 获取队列前三个元素
        Observable
                .from(initStudents())
                //.take(3)//获取队列的前三个元素
                .takeLast(2) // 获取最后的n个元素
                .subscribe(new Action1() {
                    @Override
                    public void call(Object o) {
                        Log.e("TAG", "call :" + o);
                    }
                });
    }
5.Sample&IgnoreElements使用较少
 public static void test12() {
//        Observable.interval(1000, TimeUnit.MILLISECONDS)//每秒发送1个数字
//                .sample(2000, TimeUnit.MILLISECONDS)//每2秒采样一次
//                .subscribe(new Action1<Long>() {
//                    @Override
//                    public void call(Long aLong) {
//                        Log.e("TAG", "call: " + aLong);
//                    }
//                });
        Observable.just(1,2,3,4,1)
        .ignoreElements()// 不发送消息,直接发送onCompleted()
        .subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {
                Log.e("TAG", "onCompleted: ");
            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Integer integer) {
                Log.e("TAG", "ontext: "+integer);
            }
        });
    }




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值