[英]How to Transform Observable<Observable<List<T>>> to Observable<List<T>>
我坚持如何将以下可观察类型转换/转换为我的目标类型:
我有类型的可观察性:
Observable<Observable<List<FooBar>>>
我想将其转换为:
Observable<List<FooBar>>
因此,当我订阅它时,它会发出List<FooBar>
not Observable<List<FooBar>>
我尝试使用map,flatMap ......我找不到解决方案。
但是,我发现了一个名为blockingFirst
的奇怪运算符,我的IDE指示它在应用于Observable<Observable<List<FooBar>>>
Observable<List<FooBar>>
时返回Observable<List<FooBar>>
但是“阻塞”部分令我感到困惑。
我也在寻找比blockingFirst
一个更好的解决方案,如果有的话。
flatMap
确实是要走的路:
Observable<Observable<List<FooBar>>> streamOfStreams = ...
Observable<List<FooBar>> listStream =
streamOfStreams.flatMap(listObservable -> listObservable);
我认为你应该从不同的角度看待它,从1种类型转换到另一种类型并不简单。 Observable
的Observables
意味着发出流的流,每个流都发出一些项目的列表。 你想要实现的是将它展平为单个流,从所有流中发出所有列表。
flatMap
完全执行它,你给它一个项目发射,并返回一个Observable
, flatMap
将订阅返回的Observable
并将它发出的每个项目合并到源流,在这种情况下,你只需返回每个项目发射,这是Observable<List<FooBar>>
,你实际上接受每个发出的Observable
,订阅它,然后合并它的所有列表排放,这样你就可以从所有Observables
获取所有列表的回流。
blockingFirst
绝对不是要走的路,它的作用是等待(阻塞)直到第一次发射并仅返回此项,因为你的物品是Observable<List<FooBar>>
你将获得唯一的第一个Observable
。 所以虽然它确实具有相同的类型,但它显然不是你想要的流。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.