【问题标题】:Use flatMap or zip in RxJava2?在 RxJava2 中使用 flatMap 或 zip?
【发布时间】: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 更好?

【问题讨论】:

    标签: rx-java rx-java2


    【解决方案1】:

    你显然是在组合两个 observable,这就是 zip() 的目的。不仅如此,gradeObservable 和schoolObservable 将与zip() 并行执行,而您的flatmap() 解决方案将序列化请求。所以,是的,zip() 更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-14
      • 1970-01-01
      • 1970-01-01
      • 2019-12-02
      • 2020-04-29
      相关资源
      最近更新 更多