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

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操作符的用法啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值