美文网首页
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

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