java - Observable#take(Long) 未在 RxJava 中返回所需的项目大小
问题描述
我正在使用 RxJava/KotlinObservable#take()
从列表中获取前 50 个项目。但是#take()
操作员的行为并不符合 Rx 文档的要求。
在 Rx 文档中,#take()
定义为:
“只发射 Observable 发射的前 n 个项目”
我有这样的功能:
正如我们所看到的,pageSize
论点是50
和首字母size
是list
300
在那之后,#take(50)
在下Observable
一个断点,我仍然得到完整的大小列表i.e. size = 300
但是just for the check
,如果调试器或 observable 出现问题,我尝试仅获取 displayName 包含“9”的项目,但这次我smaller list
在9
每个#displayName field
.
我相信RxJava/Kotlin's #take()
运营商没有那么疯狂,只有我。
解决方案
take
行为正确,因为它只会给你 50 个List<FollowersEntry>
“弹珠”。根据您的屏幕截图和措辞,我猜您想要 50 FollowersEntry
。对象容器和对象本身之间存在根本的逻辑差异。RxJava 只看到一个类型的对象序列,List<>
但它不知道您打算使用的嵌套对象。
因此,您要么必须使用it.take(50)
inside map
(或任何 Kotlin 集合函数),要么通过以下方式将列表序列展开为条目序列flatMapIterable
:
getFollowers()
.flatMapIterable(entry -> entry)
.take(50 /* entries this time, not lists */)
推荐阅读
- sql - PostgreSQL:将多个日期列动态转置为行
- unity3d - 可以在团结中找到一个孩子,但不能找到另一个孩子
- angular - 角度,只是从 LIBRARY 导入组件而不是整个库模块
- python - 如何在只有 **kwargs 参数的构造函数中正确使用空列表作为默认参数
- sed - Need to do sed to replace ${D} string in do_install()
- node.js - Webpack 运行没有错误但浏览器为空
- qt - 为什么 QMenu:hover 在 QtDesigner 中不起作用
- bash - 在数据范围bash之间搜索文件
- android - Android 文本中的 dp 或 sp
- r - 有没有办法让 R 中的 flextable 中的单个单元格具有圆角?