Android RxJava的基本使用三

map

在使用map之前要先说道一个接口:Func1,Func1和上一篇提到的Action1相似。Func1 和 Action的区别在于, Func1 包装的是有返回值的方法。
接下来就是map的用法,看代码更直观点;

   Observable.just(student,student2,student3)
                .map(new Func1<Student, String>() {
                    @Override
                    public String call(Student student) {
                        String name=student.getName();
                        return name;
                    }
                })
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                         Logger.d(s);
                         list.add(s);
                    }
                });

Student对象转换为String类型
map可以起到一个转换的作用,map可以多次使用

 Observable.just("a","b")
                .map(new Func1<String, Integer>() {
                    @Override
                    public Integer call(String s) {
                        return s.hashCode();
                    }
                })
                .map(new Func1<Integer, String>() {
                    @Override
                    public String call(Integer integer) {
                        return integer.toString();
                    }
                })
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                       Logger.d(s);
                    }
                });

flatMap

flatMap是一个比教难理解的一个转换,在这里先假设一个需求,需要打印多个Student所学的课程。这跟之前获取Student的name又不同了,这里先确定一下关系,一个Student类中只有一个name,而一个Student却有多门课程(Course)

这里写代码片
 Observable.just(student,student1)
                .flatMap(new Func1<Student, Observable<Course>>() {
                    @Override
                    public Observable<Course> call(Student student) {
                        return Observable.from(student.getCourseList());
                    }
                })
                .subscribe(new Action1<Course>() {
                    @Override
                    public void call(Course course) {
                        Logger.d(course.getCoursename());
                    }
                });

自己的理解:
flatMap新生成了一个Observable对象,返回的所有课程作为再次被观察的对象集合,有两个被观察的对象,订阅返回单个Course对象

有不合理的地方欢迎各位大神指出,谢谢

发布了26 篇原创文章 · 获赞 18 · 访问量 4万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览