Android rxJava выполняет операции с результатами, полученными из Observable (map, flatMap, concatMap)

Возможный Дубликат RxJava, выполняющий операцию над списком и возвращающий наблюдаемое

Я очень новичок в rxJava. Чего я хочу добиться - это получить данные из базы данных как ArrayList и выполнить некоторые операции с каждым элементом ArrayList, Я хочу сделать все это одним вызовом / кодом rxjava. Ниже приведен мой код для получения списка элементов из базы данных, который работает нормально.

getCompositeDisposable().add(getAllFilters()
                .subscribeOn(getSchedulerProvider().io())
                .observeOn(getSchedulerProvider().ui())
                .subscribe(new Consumer<List<Filter>>() {
                    @Override
                    public void accept(List<Filter> filters) throws Exception {
                    }
                })); 


public Observable<List<Filter>> getAllFilters() {
        return Observable.fromCallable(new Callable<List<Filter>>() {
            @Override
            public List<Filter> call() throws Exception {
                return mAppDatabase.filterDao().getFilters();
            }
        });
    }

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

getCompositeDisposable().add(applySomeOperation()
                .subscribeOn(getSchedulerProvider().io())
                .observeOn(getSchedulerProvider().ui())
                .subscribe(new Consumer<List<Filter>>() {
                    @Override
                    public void accept(List<Filter> filters) throws Exception {
                    }
                }));

Но я хочу выполнить обе эти задачи за один звонок. Получить список элементов из базы данных, а затем выполнить фоновую задачу для каждого элемента списка и, наконец, вернуть список. Я читал о map, flatMap а также concatMap но не знаю, как использовать это в этом контексте. В настоящее время я смог написать этот код, но не знаю, как он работает

getDataManager().getAllFilters().concatMap(new Function<List<Filter>, ObservableSource<?>>() {
            @Override
            public ObservableSource<?> apply(List<Filter> filters) throws Exception {
                return null;
            }
        });

0 ответов

Другие вопросы по тегам