rxjava2代码实战5--distinct,filter,buffer

distinct: 对数据源里的数据去重后输出
filter:根据过滤规则过滤数据
buffer:隔m个数取n个数

代码地址:

GitHub - GodisGod/Rxjava2Test
https://github.com/GodisGod/Rxjava2Test

distinct:

我们这里有一个数据源:
private Integer[] datas = {1, 1, 1, 2, 2, 2, 3, 3, 4, 4, 5, 5};

注意这里是Integer对象数组,如果是int[]是不行的哦,大家可以试一下

我们对这些数字去重后输出

                        Observable.fromArray(datas)//注意这里是Integer数组,如果是int[]是不行的哦,大家可以试一下
                                .distinct()
                                .subscribe(new Consumer<Integer>() {
                                    @Override
                                    public void accept(Integer value) throws Exception {
                                        Log.i("LHD", "distinct : " + value);
                                        tvResult.append(value + "  ");
                                    }
                                });

结果:
distinct

再试一下把一个对象list过滤重复数据,这里需要我们自己定义一下根据对象的哪个字段来过滤,如果两个对象这个字段相等就过滤

我们定义了一个学生数据源:

        Student student1 = new Student("LHD", 90);
        Student student2 = new Student("LHD1", 80);
        Student student3 = new Student("LHD2", 70);
        Student student4 = new Student("LHD3", 96);
        Student student2 = new Student("LHD4", 80);
        Student student22 = new Student("LHD4", 80);
        Student student23 = new Student("LHD4", 80);
        Student student3 = new Student("LHD5", 70);
        Student student4 = new Student("LHD5", 70);
                Observable.fromIterable(students)
                        .distinct(new Function<Student, String>() {
                            @Override
                            public String apply(Student student) throws Exception {
                                return student.getName();//如果两个学生分数一样就过滤
                            }
                        })
                        .subscribe(new Consumer<Student>() {
                            @Override
                            public void accept(Student student) throws Exception {
                                Log.i("LHD", "distinct : " + student.getName());
                                tvResult.append(student.getName() + "    ");
                            }
                        });

输出结果:

distinct

filter:使用很简单,大家看代码就会啦(#^.^#)

                Observable.fromIterable(students)
                        .filter(new Predicate<Student>() {
                            @Override
                            public boolean test(Student student) throws Exception {
                                return student.getScore() > 80;//大于80分的过滤
                            }
                        }).subscribe(new Consumer<Student>() {
                    @Override
                    public void accept(Student student) throws Exception {
                        Log.i("LHD", "  filter:  " + student.getName());
                        tvResult.append("大于80分的:\n" + student.getName() + "\n");
                    }
                });

输出结果:

filter

buffer:每隔m个数据输出n个数据

数据源:每三个里面输出前两个,如下图所示

        Student student1 = new Student("LHD", 90);//-----------输出
        Student student2 = new Student("LHD1", 80);//-----------输出
        Student student3 = new Student("LHD2", 70);

        Student student4 = new Student("LHD3", 96);//-----------输出
        Student student2 = new Student("LHD4", 80);//-----------输出
        Student student22 = new Student("LHD4", 80);

        Student student23 = new Student("LHD4", 80);//-----------输出
        Student student3 = new Student("LHD5", 70);//-----------输出
        Student student4 = new Student("LHD5", 70);
                Observable.fromIterable(students)
                        .buffer(2, 3)//先取2个,每三个再取2个
                        .subscribe(new Consumer<List<Student>>() {
                            @Override
                            public void accept(List<Student> students) throws Exception {
                                for (Student s : students) {
                                    Log.i("LHD", "  buffer:  " + s.getName());
                                    tvResult.append(s.getName() + "  " + s.getScore() + "\n");
                                }

                            }
                        });

输出结果:

buffer

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值