android - Not understanding Observable.from and Observable.just in RxJava
问题描述
I am new to Rxjava. I am following a video tutorial where there is a code example that calls an API and gets string result using flatmap. Below is the code:
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); }
});
But i am not really understanding the sequence of how this code works.
And the confusion is because of observable.from() & observable.just(). I know that observable.from() will give N emissions for a list and observable.just() will give 1 emissions(a list).
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. And for the second flatMap the onNext() of subscriber is called N times too(once for each call of 2nd flatmap)?
解决方案
那么,这是否意味着第二个 flatMap 被调用了 N 次,因为第一个 flatMap 内的 Observable.from() 每次都会发出列表中的每个项目。
第二个平面图 ( .flatMap(new Func1<Top, Observable<String>>() {
) 称为twitch.getTop().size()
时间。
而对于第二个 flatMap,订阅者的 onNext() 也被调用了 N 次
这是真实的。你得到一个 observable,每个都有一个值, per Top
。传递到的值onNext
的数量等于Top
s 的数量。
这使得第二张平面地图有点臃肿。你还不如map
一个Top
to String
。
不相关:您可能想查找更新的教程。RxJava1 差不多一年前就死了。
RxJava 1.x 现在正式报废(EOL)。在版本1.3.8和 [2018 年 3 月 31 日] 之后,此项目将不再提供进一步的开发、错误修复、增强、javadoc 更改或维护。
鼓励用户迁移到 2.x。相应地,该 wiki 将在未来几个月内更新以描述 2.x 的特性和属性。
推荐阅读
- r - 如何清楚地可视化总和为相同值的多个类别的计数
- sql - 在 SQL 中插入新表会出错
- node.js - 使用 ReactJS 和 NodeJS Web APP 的 Bot FrameWork Edge 40.15063.674.0 问题
- react-native - 尝试将 expo 安装为“npm install expo-cli --global”,但出现很多错误
- java - 我的 .jar 文件中该文件的相对路径是什么?
- java - Rest Controller 不是异步的
- c# - 如何使 AddWebAllowedObject() 函数在 UWP 项目中工作?
- python - 如何在循环中导入许多 .txt 文件但没有连接?
- java - Android WebView 无法从 HTML 字符串正确加载数据
- swift - 使用 AutoLayout 调整子视图的大小