Смущен результатом карты - PullRequest
0 голосов
/ 04 апреля 2019

У меня есть следующее:

fun getAttendees(): Single<List<Parent>>
fun getChildren(int idOfParent): Single<ChildrenResponse>

ChildrenResponse contains a List<Children>

Если я подпишусь на:

getAttendees()
.flatMapObservable { parentList -> Observable.from(parentList) }
.map { parent -> getChildren(parent.id) }

Android Studio сообщает мне, что я получаю сингл вместо ChildrenResponse.

Мой второй вопрос: как мне получить наблюдаемое, которое возвращает агрегированный список всех детей (потомков parent1 + потомков parent2 и т. Д.)

1 Ответ

1 голос
/ 04 апреля 2019

Вам необходимо использовать flatMap вместо map, поскольку getChildren () является потоком.Таким образом, обновленный товар будет выглядеть примерно так:

getAttendees() 
    .flatMapObservable { parentList -> Observable.from(parentList) }
    // Iterate through parentList
    .flatMapIterable{parents -> parents}
    // For each parent get the children and create a pair of <Parent, List<Children>>
    .flatMapSingle { 
        parent -> getChildren(parent.id)
                  //Mapping children to Pair<Parent, List<Children>>
                  .map{children -> Pair.create(parent, children)}
    }
    // Create List<Pair<Parent, List<Children>>>
    .toList()
    .subscribe(
        result -> Get List<Pair<Parent, List<Children>>>,
        error -> //handle error
    );

PS: я не знаком с Rx-kotlin и, следовательно, мой стиль кодирования будет в большей степени соответствовать стилю Rx-Java.

...