Усечение FlatMapIterable

Я хочу сопоставить список элементов с наблюдаемыми, а затем каждую плоскую карту наблюдаемых элементов с другой функцией для ее обработки, чтобы сохранить результаты некоторого вызова 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.

Любые идеи, почему я не могу добраться до всех элементов на последней плоской карте?

Спасибо.


person Arnaldo Ignacio Gaspar Véjar    schedule 22.12.2015    source источник
comment
Убедитесь, что у вас установлена ​​последняя версия RxJava: 1.0.17 или 1.1.0.   -  person akarnokd    schedule 28.12.2015
comment
Я использую 1.0.14, возможно, это может быть. Я собираюсь попробовать еще раз.   -  person Arnaldo Ignacio Gaspar Véjar    schedule 28.12.2015


Ответы (1)


Во-первых, просто для проверки попробуйте выполнить

вместо:

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

попробуй это:

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

И распечатайте здесь вывод Logcat.

person Aleksandr    schedule 23.12.2015
comment
Попробую, спс! - person Arnaldo Ignacio Gaspar Véjar; 23.12.2015