不了解RxJava中的Observable.from和Observable.just

时间:2019-02-11 23:16:02

标签: android rx-java rx-android

我是Rxjava的新手。我正在跟踪一个视频教程,该视频教程中有一个代码示例,该代码示例调用API并使用flatmap获取字符串结果。下面是代码:

twitchAPI.getTopGamesObservable()
                .flatMap(new Func1<Twitch, Observable<Top>>() {
            @Override
            public Observable<Top> call(Twitch twitch) {
                Observable<Top> rtnTop =  Observable.from(twitch.getTop());
                Log.d("LogRx", "Size for FROM:"  + "\n");

                return rtnTop;
            }
        })
                .flatMap(new Func1<Top, Observable<String>>() {
            @Override
            public Observable<String> call(Top top) {
                Log.d("LogRx", "Size for JUST:"  + "\n");
                return Observable.just(top.getGame().getName());
            }
        })
                .subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Observer<String>() {
            @Override
            public void onCompleted() {     }

            @Override
            public void onError(Throwable e) {    }

            @Override
            public void onNext(String s) {  Log.d("LogRx", s);      }

        });

但是我并不是很了解这段代码的工作顺序。

而造成混淆的原因是observable.from()和observable.just()。我知道observable.from()将给出一个列表的N个排放量,而observable.just()将给出一个列表的1个排放量。

因此,这是否意味着第二个flatMap被调用了N次,因为第一个flatMap中的Observable.from()每次都会发出列表中的每个项目。对于第二个flatMap,订阅者的onNext()也被调用了N次(每次第二个flatmap调用一次)?

1 个答案:

答案 0 :(得分:0)

  

因此,这是否意味着第二个flatMap被调用了N次,因为第一个flatMap中的Observable.from()每次都会发出列表中的每个项目。

第二个平面图(.flatMap(new Func1<Top, Observable<String>>() {)被调用twitch.getTop().size()次。

  

对于第二个flatMap,订阅者的onNext()也被称为N次

是真的。每Top您将获得一个可观察值,每个可观察值都有一个值。传递给onNext的值的数量等于Top s的数量。

这使第二张平面地图有些膨胀。您也可以mapTopString


不相关:您可能需要查找更新的教程。 RxJava1大约在一年前就死了。

  

RxJava 1.x现在正式报废(EOL)。在版本 1.3.8 之后和[2018年3月31日]之后,此项目将不再提供进一步的开发,错误修复,增强,javadoc更改或维护。

     

鼓励用户使用migrate to 2.x。因此,Wiki将在未来几个月内更新,以描述2.x的特性和属性。

来源:https://github.com/ReactiveX/RxJava/releases/tag/v1.3.8