在RxJava中使用FlatMap 2

时间:2017-05-01 16:42:19

标签: android rx-java2

我在一个新项目上使用RxJava 2(我很长一段时间以来一直在使用RxJava 1)我在使用flatMap(或者flatMapSingle?)时遇到了一些问题。 在整个概念中似乎都缺少一些东西。

mObjectManager.getAllObjects返回AsyncProcessor<List<Object>>。 (我用&#39; Object&#39;替换了实际的班级名称。

Disposable subscription = mObjectManager.getAllObjects()
                .flatMapSingle(new Function<List<Object>, SingleSource<Object>>() {
                    @Override
                    public SingleSource<Object > apply(@io.reactivex.annotations.NonNull List<Object> objects) throws Exception {
                        // TODO WHAT GOES HERE?!
                    }
                }).filter(new Predicate<Object>() {
                    @Override
                    public boolean test(@io.reactivex.annotations.NonNull Object object) throws Exception {
                        return TextUtils.isEmpty(mSearchTerm) || object.name.toLowerCase().contains(mSearchTerm.toLowerCase());
                    }
                }).toSortedList(new Comparator<Object>() {
                    @Override
                    public int compare(Object c1, Object c2) {
                        return c1.name.compareTo(c2.name);
                    }
                })
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Consumer<List<Object>>() {
                    @Override
                    public void accept(@io.reactivex.annotations.NonNull List<Object> objects) throws Exception {
                        processObjects(objects);
                    }
                });

我想知道如何将列表转换为SingleSource? 如何在RxJava 2中使用flatMap?

1 个答案:

答案 0 :(得分:6)

好的,毕竟我找到了答案。 Flowable.fromIterable可以解决问题!

...
.flatMap(new Function<List<Object>, Publisher< Object >>() {
    @Override
    public Publisher< Object > apply(@io.reactivex.annotations.NonNull List< Object > objects) throws Exception {
        return Flowable.fromIterable(objects);
   }
})