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

Not understanding Observable.from and Observable.just in RxJava

我是 Rxjava 新手。我正在观看一个视频教程,其中有一个代码示例调用 API 并使用平面图获取字符串结果。下面是代码:

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() 每次都会发出列表中的每个项目。对于第二个平面图,订阅者的 onNext() 也被调用 N 次(每次调用第二个平面图一次)?

So, does it mean that the second flatMap is called N times because Observable.from() inside the first flatMap is emitting each item in the list each time.

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

And for the second flatMap the onNext() of subscriber is called N times too

这是事实。根据 Top,你得到一个可观察值,每个都有一个值。传递给 onNext 的值的数量等于 Top 的数量。

这让第二张平面地图有点臃肿。你不妨 map 一个 TopString.


无关:您可能想查找更新的教程。 RxJava1 差不多一年前就死了。

RxJava 1.x is now officially end-of-life (EOL). No further developments, bugfixes, enhancements, javadoc changes or maintenance will be provided by this project after version 1.3.8 and after [31 Mar 2018].

Users are encouraged to migrate to 2.x. In accordance, the wiki will be updated in the coming months to describe 2.x features and properties.

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