我坚持如何将以下可观察类型转换/转换为我的目标类型:
我有类型的可观察性:
Observable<Observable<List<FooBar>>>
我想将其转换为:
Observable<List<FooBar>>
因此,当我订阅它时,它会发出List<FooBar>
而不是Observable<List<FooBar>>
我尝试使用map,flatMap ......我找不到解决方案。
但是,我发现了一个名为blockingFirst
的奇怪的运算符,我的IDE指示它在应用于Observable<List<FooBar>>
时返回Observable<Observable<List<FooBar>>>
但是&#39;阻止&#39;部分令我困惑。
我也在寻找比blockingFirst
更好的解决方案,如果有的话。
答案 0 :(得分:5)
flatMap
确实是要走的路:
Observable<Observable<List<FooBar>>> streamOfStreams = ...
Observable<List<FooBar>> listStream =
streamOfStreams.flatMap(listObservable -> listObservable);
我认为你应该从不同的角度看待它,从1种类型转换到另一种类型并不简单。 Observable
的{{1}}表示发出流的流,每个流都会发出一些项的列表。你想要实现的是将它展平为单个流,从所有流中发出所有列表
Observables
完全执行此操作,您为其提供项目排放,并返回flatMap
,Observable
将订阅返回的flatMap
,并将从其发出的每个项目合并到源流,在这种情况下,当你只返回Observable
的每个项目发射时,你实际上取出每个发出的Observable<List<FooBar>>
,订阅它,然后合并它的所有列表排放,所以你得到回流来自所有Observable
的所有列表。
Observables
绝对不是要走的路,它的作用是等待(阻止)直到第一次发射并仅返回此项目,因为你的物品ar blockingFirst
你将获得唯一的第一个Observable<List<FooBar>>
。所以虽然它确实具有相同的类型,但它显然不是你想要的流。