美文网首页
Rxjava 认识5

Rxjava 认识5

作者: dev晴天 | 来源:发表于2018-08-16 17:02 被阅读0次
// 1 新的需求 打印一组student[]的名字   // 伪代码

        final Student[] students = null;
        Subscriber<Student> subscriber = new Subscriber<Student>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable throwable) {

            }

            @Override
            public void onNext(Student student) {
                Log.i(TAG, "onNext: " + student.mString);
            }
        };
        // 思路 :使用map 吧student 变换为 String 即可
        // 被观察者产生相应的变换   观察者获得结果
        Observable.from(students).map(new Func1<Student,String>() {
            @Override
            public String call(Student student) {

                return student.mString;
            }
        }).subscribe((Action1<? super String>) subscriber);


        //2  需求修改  如果查看学生的没一门课程 ( 不需要 改变类型 直接调用酒客)

        Subscriber<Student> subscriber1 = new Subscriber<Student>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable throwable) {

            }

            @Override
            public void onNext(Student student) {
                List<Student.Course> mList = student.mList;
                for (Student.Course course : mList) {
                    Log.i(TAG, "onNext: " + course.name);
                }
            }
        };
        Observable.from(students).subscribe(subscriber1);
        // 依然很简单。那么如果我不想在 Subscriber 中使用 for 循环,
        // 而是希望 Subscriber 中直接传入单个的 Course 对象呢(这对于代码复用很重要)?
        // 用 map() 显然是不行的,因为 map() 是一对一的转化,而我现在的要求是一对多的转化。
        // 那怎么才能把一个 Student 转化成多个 Course 呢?
        //这个时候,就需要用 flatMap() 了:

        // flatmap使用:flatmap(new Fun1<student,Observable<T>>)

        // 上面的案例 实现

        Subscriber<Student.Course> subscriber2 = new Subscriber<Student.Course>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable throwable) {

            }

            @Override
            public void onNext(Student.Course course) {
                Log.i(TAG, "onNext: "+course.name);
            }
        };

        Observable.from(students).flatMap(new Func1<Student, Observable<Student.Course>>() {
            @Override
            public Observable<Student.Course> call(Student student) {
                return Observable.from(student.mCourse) ;
            }
        });

相关文章

  • Rxjava 认识5

  • 认识 RxJava

    RxJava 是一个针对响应式编程思想的一个框架,其本质是利用了观察者模式,充分的利用的函数式编程的思想,学习此框...

  • RxJava使用之认识RxJava

    写在前面:由于公司拖欠工资,2月的工资都没拿到,所以最近出来面试(已收两家offer但薪资都很低),毫无疑问,每次...

  • Rxjava入门与使用

    认识 rxjava RxJava是 ReactiveX 在JVM上的一个实现,ReactiveX使用Observa...

  • Rxjava学习笔记

    1.认识 rxjava RxJava是 ReactiveX 在JVM上的一个实现,ReactiveX使用Obser...

  • Rxjava 认识4

  • Rxjava 认识3

  • Rxjava 认识2

  • Rxjava 认识1

    /** 1 概念: Rxjava 基于观察者的 异步 事件库* 2 rx的观察者模式 Observer...

  • 初步认识RXJava

    前言:面向对象变成是命令式编程的一种,面向计算机硬件的抽象,有变量、赋值、表达式和控制语句。函数式编程是面向数学的...

网友评论

      本文标题:Rxjava 认识5

      本文链接:https://www.haomeiwen.com/subject/piyobftx.html