在展平之前在RxJava中设置变量

时间:2018-01-04 23:18:05

标签: rx-java

可观察<富>从调用getSomething()返回。 Foo里面有一个列表,基本上就是我想要的数据。我需要过滤列表,以便将其展平。但是,我需要来自Foo的另一段数据来设置subscribe.onNext()中的变量。我想要设置的变量是具有默认setter的kotlin类的成员。我确实尝试从地图返回@ map,但这似乎停止了发射,使得过滤器无法使用。我确实在其他线程中查看了Pair和嵌套的Observable建议,但是没有发现它有用。我还查看了flatMapIterable的第二个带有Func2的重载版本,但没有得到它吐出限制。如何在这种情况下正确应用上述任何一种,还是有另一种更简单的解决方案?

    service.getSomething()
    .subscribeOn(Schedulers.io())

            ---> here I need to set limit = Foo.data.limit 

                        .flatMapIterable { t -> t.data.results }
                        .filter({ s -> filterLogic(s) })
                        .toList()
   .observeOn(AndroidSchedulers.mainThread())
                        .subscribe(
                                { c ->   //this is the list, not Foo

1 个答案:

答案 0 :(得分:0)

您不需要使用Rx将列表展平,然后对其进行过滤。您可以使用Kotlin的 List.filter 功能。您的最终代码可能如下所示:

service.getSomething()
    .subscribeOn(Schedulers.io())
    .map {
        Pair(Foo.data.results.filter(this::filterLogic), Foo.data.limit)
    }
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe { (filteredResults, limit) ->
    }