您的位置:首页 > 编程语言 > Java开发

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 map