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

mObjectManager.getAllObjects返回AsyncProcessor<List<Object>>
(我用“对象”代替了实际的类名)。

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?
flatMap如何在RxJava 2中使用?

最佳答案

好吧,我毕竟找到了答案。
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);
   }
})

10-05 20:41
查看更多