【发布时间】:2018-03-08 16:18:19
【问题描述】:
我有一个名为Student 的类,它有两个字段grade 和school。这两个字段都需要从远程服务器获取。当返回两个结果时,我新建了一个 Student 对象。
在RxJava 的帮助下,我以两种方式完成了它,一种在flatMap 中,另一种在zip 运算符中。
Observable<String> gradeObservable =
Observable.create((ObservableOnSubscribe<String>) emitter -> {
Thread.sleep(1000);
emitter.onNext("senior");
}).subscribeOn(Schedulers.io());
Observable<String> schoolObservable =
Observable.create((ObservableOnSubscribe<String>) emitter -> {
emitter.onNext("MIT");
}).subscribeOn(Schedulers.io());
平面地图版本
gradeObservable
.flatMap(grade ->
schoolObservable.map(school -> {
Student student = new Student();
student.grade = grade;
student.school = school;
return student;
}))
.subscribe(student -> {
System.out.println(student.grade);
System.out.println(student.school);
});
压缩版
Observable.zip(gradeObservable, schoolObservable, (grade, school) -> {
Student student = new Student();
student.grade = grade;
student.school = school;
return student;
}).subscribe(student -> {
System.out.println(student.grade);
System.out.println(student.school);
});
在我看来,zip 似乎更清楚。那么在这种情况下,运营商flatMap 或zip 更好?
【问题讨论】: