FlatMapIterable截断

时间:2015-12-22 14:40:11

标签: rx-java

我希望将一个项目列表映射到observables,然后将每个可观察项目flatmap与另一个函数一起处理,以便将一些REST API调用的结果保存到数据库中。

API调用正确返回所有项目。但是,flatMapIterable并没有将所有项目传递给最后一个flatMap。

这是代码。

restApi.getContacts(user)
        .flatMapIterable(new Func1<List<Contact>, List<Contact>>() {
            @Override
            public List<Contact> call(List<Contact> contacts) {
                return contacts;
            }
        }

        .flatMap(new Func1<Contact, Observable<Integer>>() {
            @Override
            public Observable<Integer> call(Contact Contact) {
                return create(Contact);
            }
        })

我不想使用doOnEach或doOnNext,我的问题是关于flatMapIterable的行为。

为什么我无法覆盖上一个flatmap中的所有项目?

感谢。

1 个答案:

答案 0 :(得分:1)

首先,仅供检查,请尝试以下

而不是:

    .flatMap(new Func1<List<Contact>, Observable<Contact>>() {
        @Override
        public Observable<Contact> call(List<Contact> contacts) {
            return Observable.from(contacts);
        }
    })

试试这个:

    restApi.getContacts(user)
        .doOnNext(new Action1<List<Contact>>() {
            @Override
            public void call(List<Contact> contacts) {
                Log.i(LOG_TAG, "first doOnNext size: " + contacts.size());
            }
        })
        .flatMapIterable(new Func1<List<Contact>, List<Contact>>() {
            @Override
            public List<Contact> call(List<Contact> contacts) {
                Log.i(LOG_TAG, "flatMapIterable size: " + contacts.size());
                return contacts;
            }
        })
        .flatMap(new Func1<Contact, Observable<Integer>>() {
            @Override
            public Observable<Integer> call(Contact Contact) {
                return create(Contact);
            }
        })
        .toList()
        .doOnNext(new Action1<List<Integer>>() {
            @Override
            public void call(List<Integer> integers) {
                Log.i(LOG_TAG, "second doOnNext size: " + contacts.size());
            }
        })

如果无效,请添加以下代码:

{{1}}

并在此处打印Logcat输出。