有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    flatMap确实是一条路要走:

    Observable<Observable<List<FooBar>>> streamOfStreams = ...
    Observable<List<FooBar>> listStream = 
              streamOfStreams.flatMap(listObservable -> listObservable);
    

    我认为您应该从另一个角度来看待它,从一种类型转换为另一种类型并不简单ObservableofObservables表示发出流的流,其中每个流都发出一些项目的列表。您想要实现的是将其展平为单个流,从而从所有流中发出所有列表
    flatMap确切地说,你给它一个项目发射,并返回一个ObservableflatMap将订阅返回的Observable,并将从它发射的每个项目合并到源流,在这种情况下,你只需返回每个Observable<List<FooBar>>的项目发射,你实际上要接受每个发射的Observable,订阅它,并将其所有列表排放合并回来,这样就可以从所有Observables返回所有列表的流

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