java如何将可观察的<Observable<List<T>>转换为可观察的<List<T>>
我一直在思考如何将以下可观察类型转换为我的目标类型:
我可以观察到以下类型:
Observable<Observable<List<FooBar>>>
我想将其转换为:
Observable<List<FooBar>>
所以当我订阅它时,它会发出List<FooBar>
而不是Observable<List<FooBar>>
我试过用地图,平面地图。。。我找不到解决办法
然而,我发现了一个奇怪的名为blockingFirst
的操作符,我的IDE指出,当应用于Observable<Observable<List<FooBar>>>
时,它返回Observable<List<FooBar>>
但是“阻塞”部分让我困惑
我也在寻找比blockingFirst
更好的解决方案,如果有的话
# 1 楼答案
flatMap
确实是一条路要走:我认为您应该从另一个角度来看待它,从一种类型转换为另一种类型并不简单
Observable
ofObservables
表示发出流的流,其中每个流都发出一些项目的列表。您想要实现的是将其展平为单个流,从而从所有流中发出所有列表flatMap
确切地说,你给它一个项目发射,并返回一个Observable
,flatMap
将订阅返回的Observable
,并将从它发射的每个项目合并到源流,在这种情况下,你只需返回每个Observable<List<FooBar>>
的项目发射,你实际上要接受每个发射的Observable
,订阅它,并将其所有列表排放合并回来,这样就可以从所有Observables
返回所有列表的流blockingFirst
绝对不是要走的路,它所做的是等待(阻止)直到第一次发射并仅返回此项目,因为您的项目arObservable<List<FooBar>>
您将获得唯一的第一个Observable
。因此,虽然它确实具有相同的类型,但它显然不是您想要的相同流