对列表中的每个元素应用服务调用,并使用RXJava仅返回一个列表

时间:2018-12-14 13:16:14

标签: android kotlin rx-java rx-java2

我有一个调用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个结果?

谢谢

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)