繁体   English   中英

如何转换Observable <Observable<List<T> &gt;&gt;可观察到 <List<T> &gt;

[英]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种类型转换到另一种类型并不简单。 ObservableObservables意味着发出流的流,每个流都发出一些项目的列表。 你想要实现的是将它展平为单个流,从所有流中发出所有列表。
flatMap完全执行它,你给它一个项目发射,并返回一个ObservableflatMap将订阅返回的Observable并将它发出的每个项目合并到源流,在这种情况下,你只需返回每个项目发射,这是Observable<List<FooBar>> ,你实际上接受每个发出的Observable ,订阅它,然后合并它的所有列表排放,这样你就可以从所有Observables获取所有列表的回流。

blockingFirst绝对不是要走的路,它的作用是等待(阻塞)直到第一次发射并仅返回此项,因为你的物品是Observable<List<FooBar>>你将获得唯一的第一个Observable 所以虽然它确实具有相同的类型,但它显然不是你想要的流。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM