mal*_*yeb 2 java reactive-programming rx-java rx-java2
我坚持如何将以下可观察类型转换/转换为我的目标类型:
我有类型的可观察性:
Observable<Observable<List<FooBar>>>
Run Code Online (Sandbox Code Playgroud)
我想将其转换为:
Observable<List<FooBar>>
Run Code Online (Sandbox Code Playgroud)
因此,当我订阅它时,它List<FooBar>不会发出Observable<List<FooBar>>
我尝试使用map,flatMap ......我找不到解决方案.
然而,我发现了一个奇怪的外观操作符blockingFirst,我的IDE指示它Observable<List<FooBar>>在应用时返回Observable<Observable<List<FooBar>>>
但是"阻塞"部分令我感到困惑.
我也在寻找比blockingFirst一个更好的解决方案,如果有的话.
flatMap 确实是要走的路:
Observable<Observable<List<FooBar>>> streamOfStreams = ...
Observable<List<FooBar>> listStream =
streamOfStreams.flatMap(listObservable -> listObservable);
Run Code Online (Sandbox Code Playgroud)
我认为你应该从不同的角度看待它,从1种类型转换到另一种类型并不简单.Observable的Observables意思是发射它们中的每发射的一些项的列表流的流.你想要实现的是将它展平为单个流,从所有流中发出所有列表.
flatMap完全这样做,你给它一个项目发射,并返回一个Observable,flatMap将订阅返回的,并将Observable从它发出的每个项目合并到源流,在这种情况下,因为你只是返回每个项目发射,这是Observable<List<FooBar>>,你实际上采取每个发出Observable,订阅它,并将所有列表排放合并回来,所以你得到所有列表中的所有列表的回流Observables.
blockingFirst绝对不是要走的路,它做的是等待(阻止)直到第一次发射并仅返回这个项目,因为你的项目Observable<List<FooBar>>你将获得唯一的第一个Observable.所以虽然它确实具有相同的类型,但它显然不是你想要的流.
| 归档时间: |
|
| 查看次数: |
436 次 |
| 最近记录: |