我有一个调用Firebase的方法。此方法接受日期并返回一个可观察值。
然后我有一个日期数组,将用作此firebase调用的参数。
我需要对数组中的每个项目调用一次该方法,最后将其连接到一个列表中。
但是我不知道如何实现。
我正在尝试执行以下操作:
for (dateToRetrieve in listOfDatesToRetrieve) {
val subscription = FireBaseUtils.getEventsForMap(dateToRetrieve)
.subscribeOn(Schedulers.io())
.subscribe { retrievedEventsForMap ->
val eventsList: MutableList<Event> = retrievedEventsForMap
eventListWithNoDuplicatesTotal.addAll(eventsList)
var eventListWithNoDuplicates = eventListWithNoDuplicatesTotal.distinctBy { it -> it.eventID }
this.presenter.onEventsRetrieved(eventListWithNoDuplicates as MutableList<Event>)
}
this.presenter.addSubscription(subscription)
}
但是我知道这不是最好的解决方案,因为我将一个接一个地发送呼叫并将其添加到列表中。
是否有可能通过所有调用的组合返回1个结果?
谢谢
答案 0 :(得分:0)
尝试一下:
val subscription = Observable.fromIterable(listOfDatesToRetrieve)
.flatMap(dateToRetrieve -> FireBaseUtils.getEventsForMap(dateToRetrieve))
.flatMapIterable { item -> item }
.toList()
.distinct { it -> it.eventID }
.subscribeOn(Schedulers.io())
.subscribe { list ->
this.presenter.onEventsRetrieved(list as MutableList<Event>)
}
this.presenter.addSubscription(subscription)