Android rxJava对来自Observable的结果执行操作(map,flatMap,concatMap)

时间:2018-02-11 17:05:49

标签: android rx-java rx-android flatmap concatmap

可能重复RxJava performing operation on a list and returning an observable

我是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 {
                    }
                }));

但我想在一次通话中完成这两项任务。从数据库中获取项目列表,然后对列表中的每个项目执行后台任务,最后返回一个List。我已阅读有关mapflatMapconcatMap的内容,但我们不知道如何在此上下文中使用它。目前我已经能够编写此代码,但不知道它是如何工作的

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

0 个答案:

没有答案