RXJava入门03

来源:互联网 发布:飞机pull up知乎 编辑:程序博客网 时间:2024/05/21 19:26

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);            }        });    }




原创粉丝点击