有人可以帮我找到解决这个问题的正确方法吗?
Observables
我需要的数据,Events
。EventGroup
,其中包含同一组中所有事件的ID。Event
。但是,我得到一个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:DR
如何从Observable<List<X>>
获取Observable<List<Observable<X>>>
?
答案 0 :(得分: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都是有限的。
答案 1 :(得分: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 }