java - 如何使用 RxJava 过滤列表并将所有匹配的元素分组
问题描述
我有一个非常大的列表,想Filter
在后台线程中对其执行简单的操作,然后在操作结束时获取与过滤条件匹配的结果列表。
我还是 RxJava 的新手,所以我很难让它发挥作用。我所拥有的是以下(充满largeList
):ArrayList
Item
Observable
.fromIterable(largeList)
.filter { it.name.contains(query) }
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe { ... }
当 I 时subscribe
,我会返回一个Item
而不是通过过滤器的所有项目的完整列表。如何创建所有匹配结果的子列表?
解决方案
对于给定的 Observable,它会将传入的排放收集到一个列表中,然后将整个列表作为单个排放推送(通过 Single>)。
Observable
.fromIterable(largeList)
.filter { it.name.contains(query) }
.toList()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe { ... }
此外,您可以选择指定一个整数参数作为容量提示,这将优化 ArrayList 的初始化以大致预期该数量的项目:
Observable
.fromIterable(largeList)
.filter { it.name.contains(query) }
.toList(capacityHint)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe { ... }
推荐阅读
- javascript - 为什么我在全局定义这个变量时没有定义它?(javascript, p5.js)
- python - 使用 psycopg2 将数据从 python 上传到 postgresql 时将“nan”替换为空白
- bash - 为什么 echo 命令会返回这种结果?
- java - 如何使用简单的 java 命令运行 Maven 项目
- json - Kotlin Json 解析
- excel - 如何在Excel中引用完整的列,其中有一个值
- c - fopen 在 main 中有效,但在另一个文件中的函数中无效
- haskell - 显示自定义复杂数据类
- javascript - 将 object-props 传递给新对象的构造函数
- reactjs - 反应 axios NTLM 身份验证