如何使用RxJava过滤列表并将所有匹配的元素分组

时间:2018-08-25 10:15:49

标签: java android rx-java

我的列表很大,想在后台线程中对其执行简单的Filter操作,然后在操作结束时获取与过滤条件匹配的结果列表。

我在RxJava上还很陌生,所以我正在努力使其正常工作。我所拥有的是以下内容(largeList是用ArrayList填充的Item):

    Observable
            .fromIterable(largeList)
            .filter { it.name.contains(query) }
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe { ... }

当我subscribe时,我得到一个Item而不是通过过滤器的所有项目的完整列表。如何创建所有匹配结果的子列表?

1 个答案:

答案 0 :(得分:1)

使用toList()运算符。 toList working

对于给定的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 { ... }