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;
}
});