rxjava2代码实战1--Map操作符
2017-12-04 22:39
337 查看
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转换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操作符的用法啦。
相关文章推荐
- rxjava2代码实战3--flatMap,concatMap操作符
- RxJava实战:变换操作符map的使用姿势及技巧
- rxjava2代码实战2--zip操作符
- rxjava2代码实战4--interval,take操作符clipdrawable制作图片进度条
- RxJava 系列之变换操作符map(2)
- RxJava 操作符map
- RxJava的map操作符
- RxJava flatMap操作符用法详解
- 第35讲:List的map、flatMap、foreach、filter操作代码实战
- 02_RxJava转换操作符代码示例
- RxJava变换操作符:.concatMap( )与.flatMap( )的比较
- 【Android实战】基于RxJava和Retrofit的登录注册(包含客户端和服务器端代码)
- Android BitmapShader 实战 实现圆形、圆角图片——代码分析
- RxJava(三) flatMap操作符用法详解
- RxJava进阶之源码分析map() 操作符分析
- Scala 深入浅出实战经典 第40讲:Set、Map、TreeSet、TreeMap操作代码实战
- [RxJava学习]操作符flatMap源码分析
- RxJava变换操作符:.concatMap( )与.flatMap( )的比较(即有序对无序)
- 35.List的map、flatMap、foreach、filter操作代码实战
- 小白学习Rxjava2,从零开始到实战(三) 操作符