我是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调用一次)?
答案 0 :(得分:0)
因此,这是否意味着第二个flatMap被调用了N次,因为第一个flatMap中的Observable.from()每次都会发出列表中的每个项目。
第二个平面图(.flatMap(new Func1<Top, Observable<String>>() {
)被调用twitch.getTop().size()
次。
对于第二个flatMap,订阅者的onNext()也被称为N次
是真的。每Top
您将获得一个可观察值,每个可观察值都有一个值。传递给onNext
的值的数量等于Top
s的数量。
这使第二张平面地图有些膨胀。您也可以map
到Top
到String
。
不相关:您可能需要查找更新的教程。 RxJava1大约在一年前就死了。
RxJava 1.x现在正式报废(EOL)。在版本 1.3.8 之后和[2018年3月31日]之后,此项目将不再提供进一步的开发,错误修复,增强,javadoc更改或维护。
鼓励用户使用migrate to 2.x。因此,Wiki将在未来几个月内更新,以描述2.x的特性和属性。