Применить вызов службы для каждого элемента в списке и вернуть только один список с помощью RXJava - PullRequest
0 голосов
/ 14 декабря 2018

У меня есть метод, который делает вызов 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 голосов
/ 15 декабря 2018

Попробуйте это:

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)
...