1

有人可以帮我找到解决我面临的这个问题的正确方法吗?

  1. 我有一个后端服务,可以为我Observables提供所需的数据,即Events.
  2. 形成 Event 我可以得到一个EventGroup,其中包含同一组中所有事件的 Id。
  3. 接下来,我可以获得Event属于该组的所有 s。

但是,我得到了一个Observable<List<Observable<Event>>>,我想得到一个Observable<List<Event>>。在不实际订阅嵌套的情况下,如何实现这一点Observables

val events : Observable<List<Observable<Event>>> = 
   eventProvider.observable
      .flatMap { myBackend.getEventGroup(it.eventGroupId) }
      .map { 
         it.eventIds.map { myBackend.getEvent(it) } 
      }

TL:博士

我如何Observable<List<X>>Observable<List<Observable<X>>>?

4

2 回答 2

1

flatMap 两次,然后使用 toList:

Observable<List<Observable<X>> source = ...

Observable<Observable<X>> step1 = source.flatMapIterable(v -> v);

Observable<X> step2 = step1.flatMap(v -> v);

Observable<List<X>> result = step2.toList();

请注意,这要求所有参与的 Observable 都是有限的。

于 2017-06-22T22:58:09.100 回答
0

我想通了,灵感来自@akarnokd 的回答。@akarnokd 答案期望所有来源都是有限的,但我的都是无限的。但是我也可以忍受部分无限。

我需要我的结果Observable是无限的,因为我想收到一个新的列表,Events每当eventProvider.observable发出一些东西。但是,我可以接受通过myBackend.getEvent(it)充当有限源返回的事件。

val events : Observable<List<Event>> = 
   eventProvider.observable
      .flatMap { myBackend.getEventGroup(it.eventGroupId) }
      .map { it.eventIds.map { myBackend.getEvent(it) } }
      .map { it.toObservable().flatMap { it.first() }.toList() }
      .flatMap { it }
于 2017-06-23T13:07:37.583 回答