rxjava2代码实战1--Map操作符

来源:互联网 发布:淘宝兼职要身份证干么 编辑:程序博客网 时间:2024/05/18 15:54

map操作符

可以将一个对象使用指定的方法转换为另一个对象再发射出去

demo下载地址:
GitHub - GodisGod/Rxjava2Test
https://github.com/GodisGod/Rxjava2Test

代码实战:

根据学生成绩判断老师好坏并打印结果

学生类:使用了Kotlin代码

class Student(name: String = "", score: Int = 0) {    var name = name    var score = score}

老师类:

public class Teacher {    private String name;    private boolean isGood;    public Teacher(String name, boolean isGood) {        this.name = name;        this.isGood = isGood;    }    //省略了...get/set方法...    @Override    public String toString() {        return "Teacher{" +                "name='" + name + '\'' +                ", isGood=" + isGood +                '}';    }}

map转换单个对象

有一个学生叫LHD,他得了100分。当学生分数大于90分的时候老师为好老师

关键代码:

        observableSigle = Observable.create(new ObservableOnSubscribe<Student>() {            @Override            public void subscribe(ObservableEmitter<Student> e) throws Exception {                //学生                Student student = new Student("LHD", 100);                e.onNext(student);                e.onComplete();            }        }).map(new Function<Student, Teacher>() {//使用map操作符进行转换            @Override            public Teacher apply(Student student) throws Exception {                //将学生根据业务要求转换为老师并发射出去                String name = student.getName() + "的老师";                boolean isGood = student.getScore() >= 90;                Teacher teacher = new Teacher(name, isGood);                return teacher;            }        });        //点击按钮触发转换        btnMapSignle.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                tv_map_result.setText("转换单个\n:");                observableSigle                        .subscribeOn(Schedulers.io())//io线程发送                        .observeOn(AndroidSchedulers.mainThread())//主线程接收                        .subscribe(new Consumer<Teacher>() {                            @Override                            public void accept(Teacher teacher) throws Exception {                                Log.i("LHD", teacher.toString());                                tv_map_result.append(teacher.toString() + "\n");                            }                        }, new Consumer<Throwable>() {//异常处理                            @Override                            public void accept(Throwable throwable) throws Exception {                                Log.i("LHD", "Consumer<Throwable> = " + throwable.getMessage());                            }                        }, new Action() {//最终都会走到这里                            @Override                            public void run() throws Exception {                                Log.i("LHD", "Action");                            }                        });            }        });

结果:
map

map转换list

有多个学生,他们得分各不相同。当学生分数大于90分的时候老师为好老师

构建学生list

public class GetBeansUtil {    public static List<Student> getStudents() {        final Student student1 = new Student("LHD", 90);        Student student2 = new Student("LHD1", 80);        Student student3 = new Student("LHD2", 70);        Student student4 = new Student("LHD3", 96);        final List<Student> list = new ArrayList<Student>();        list.add(student1);        list.add(student2);        list.add(student3);        list.add(student4);        return list;    }}

使用map进行转换

        final List<Student> list = GetBeansUtil.getStudents();        //发送list的每个item并使用map转换        observableList = Observable.fromIterable(list)                .map(new Function<Student, Teacher>() {                    @Override                    public Teacher apply(Student student) throws Exception {                        String name = student.getName() + "的老师";                        boolean isGood = student.getScore() >= 90;                        Teacher teacher = new Teacher(name, isGood);                        return teacher;                    }                });

//点击按钮开始发射事件

        btnMapList.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View view) {                tv_map_result.setText("转换list\n:");                observableList                        .subscribeOn(Schedulers.io())                        .observeOn(AndroidSchedulers.mainThread())                        .subscribe(new Consumer<Teacher>() {//当调用subscribe才会开始发射事件                            @Override                            public void accept(Teacher teacher) throws Exception {                                Log.i("LHD", teacher.toString());                                tv_map_result.append(teacher.toString() + "\n");                            }                        }, new Consumer<Throwable>() {                            @Override                            public void accept(Throwable throwable) throws Exception {                                Log.i("LHD", "Consumer<Throwable> = " + throwable.getMessage());                            }                        }, new Action() {                            @Override                            public void run() throws Exception {                                Log.i("LHD", "Action");                            }                        });            }        });

结果:

Teacher{name='LHD的老师', isGood=true}Teacher{name='LHD1的老师', isGood=false}Teacher{name='LHD2的老师', isGood=false}Teacher{name='LHD3的老师', isGood=true}

以上就是map操作符的用法啦。

原创粉丝点击