у родителей есть дети. у детей есть тестовые идентификаторы. каждый идентификатор теста соответствует баллу теста. Я хочу, чтобы у каждого ребенка был список результатов тестов.
getParentObservable (): Observable<Parent>
getChildrenSingle (val parentId: Int): Single<List<Child>>
Child содержит List<Int>
testIds и List<Score>
баллов, которые я хочу заполнить
getScoresSingle (val testId: Int): Single<Score>
Я пробовал следующее с неожиданными результатами:
// children is a class level var List<Child>
var childIndex = 0
getParentObservable()
.flatMap { parent -> getChildrenSingle(parent.Id) }
.flatMapObservable { kids ->
children = kids
Observable.fromIterable(kids)
}
.flatMap { kid -> Observable.fromIterable(kid.testIds) }
.flatMapSingle { testId -> getScoresSingle(testId) }
.toList()
.compose(IoMainThreadScheduler)
.subscribe { currentKidsScores ->
children[childIndex].scores = currentKidsScores
childIndex = childIndex + 1
}
Вот иллюстрация того, как это может выглядеть:
Parent1
-->Child 1
-->TestId1
-->TestScore1
-->Child2
-->TestId1
-->TestScore1
-->TestId2
-->TestScore2
Parent2
-->Child 1
-->TestId1
-->TestScore1
Я хочу, чтобы onSuccess вызывался 3 раза, по 1 на ребенка. В случае успеха ребенку должны быть назначены его / ее результаты.