Как использовать плоскую карту rxJava для выполнения параллельной задачи - PullRequest
0 голосов
/ 07 мая 2019

Я хочу вызвать функцию дважды с разными параметрами, и функция возвращает набор значений на основе параметров.Я хочу сопоставить оба результата и что-то с этим сделать.

Я поднял глаза и должен был использовать flatmap для этого, но я не уверен, как это сделать. Можете ли вы мне это подсказать, пожалуйста.

getCompaniesData (pageNumber, perPage) // возвращает 100 компаний

getCompaniesData (pageNumber, perPage) // возвращает 100 компаний

Соберите оба ответа - всего 200 компаний

Сделайте что-нибудь с этим.

В настоящее время это то, что у меня есть, которое возвращает с параметрами (1 100), Получив данные, я хочу вызвать ту же функцию с параметрами (2 100), которая дает мне другой набор данных иобъедините их обоих и сделайте что-нибудь с ними

mHighLightsPresenter. getCompaniesData(1, 1000).doOnNext(fetchCompaniesResponse -> {
                    if(fetchCompaniesResponse != null)
                    {
                        List<com.dopay.onboarding.data.bean.Company> companies = fetchCompaniesResponse.getCompanies();
                        if (companies != null && !companies.isEmpty()) {
                            showCompaniesDialog(companies);
                        }

                        Toast.makeText(getContext(), "companies response is not null", Toast.LENGTH_LONG).show();
                    }
                }).subscribe();

Ваши предложения очень полезны

Спасибо R

1 Ответ

0 голосов
/ 07 мая 2019

Сначала проверьте документы оператора flatMap, там написано:

преобразует предметы, испускаемые Наблюдаемой, в Наблюдаемые, а затем сглаживает выбросы из них в одну Наблюдаемую.

Как вызвать одну и ту же функцию с разными параметрами?

Вы можете извлечь метод getCompaniesData и передать ему два целых числа (или правильный класс) следующим образом:

Observable<T> getCompaniesData(Param param);

Как объединить разные результаты?

Вы можете применить оператор flatMap к нескольким Observable s, испускаемым определенным методом.

Observable<T> foo(Param... params) {
    return Observable.fromArray(params)
        .flatMap(this::getCompaniesData)
        ...

}
...