在 RxJava2 中使用 flatMap 还是 zip? [英] Use flatMap or zip in RxJava2?

查看:79
本文介绍了在 RxJava2 中使用 flatMap 还是 zip?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个名为 Student 的班级,它有两个字段 gradeschool.两个字段都需要从远程服务器获取.当返回两个结果时,我新建了一个 Student 对象.

I have a class called Student and it has two fields grade and school. Both of two fields need to be fetched from remote server. When two result returned, I new a Student object.

RxJava的帮助下,我以两种方式完成,一种在flatMap中,另一种在zip运算符中.

With help of RxJava, I have done it in two ways, one in flatMap and another in zip operator.

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 更好?

In my opinion, zip seems more clearly. So in this situation, operator flatMap or zip is better?

推荐答案

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

You are clearly composing two observable, which is the purpose of zip(). Not only that but gradeObservable and schoolObservable would be executed in parallel with zip() whereas your flatmap() solution would serialize requests. So, yes, zip() is better.

这篇关于在 RxJava2 中使用 flatMap 还是 zip?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆