我的列表很大,想在后台线程中对其执行简单的Filter
操作,然后在操作结束时获取与过滤条件匹配的结果列表。
我在RxJava上还很陌生,所以我正在努力使其正常工作。我所拥有的是以下内容(largeList
是用ArrayList
填充的Item
):
Observable
.fromIterable(largeList)
.filter { it.name.contains(query) }
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe { ... }
当我subscribe
时,我得到一个Item
而不是通过过滤器的所有项目的完整列表。如何创建所有匹配结果的子列表?
答案 0 :(得分:1)
对于给定的Observable,它将收集传入的排放到一个列表中,然后将整个列表作为单个排放推送(通过Single>)。
Observable
.fromIterable(largeList)
.filter { it.name.contains(query) }
.toList()
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe { ... }
此外,您可以选择指定一个整数参数来用作CapacityHint,这将优化ArrayList的初始化以大致预期该数量的项目:
Observable
.fromIterable(largeList)
.filter { it.name.contains(query) }
.toList(capacityHint)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe { ... }