комбайнПоследний внутри плоской карты - PullRequest
0 голосов
/ 12 октября 2018

У меня есть установка, подобная следующей (абстрактный пример, объясняющий проблему):

val o1: Observable<List<Parent>> = ... // simply parent observable without dependencies
val o2: Observable<List<Child>> = ... // simply child observable without dependencies

val o3: Observable<List<Child>> = o2.flatMapSingle {
    Observable.fromIterable(it)
        .flatMapSingle { getChildrenOfChild(it) } // <= simply get all children of the child `it`
        .toList()
    }

// Observable with the data of ALL parents and children
val o = Observable.combineLatest(o1, o3, BiFunction<List<Parent>, List<Child>, Pair<List<Parent>, List<Child>> {
    parents, children -> Pair(parents, children) })
    .map {
        // here the data is converted to my desired UI state
    }

Это генерирует новые данные всякий раз, когда происходит изменение в списке родителей ИЛИ списках детей.Я хочу настроить это так, чтобы списки детей генерировали новые элементы при каждом изменении в списке детей, могу ли я как-то это сделать?Я не знаю, как использовать что-то вроде combineLatest во внутреннем flatMap ...

Что я хочу

  • [СДЕЛАНО] всякий раз, когдаесть изменения в списке родителей или списке детей. Создайте новое состояние пользовательского интерфейса
  • [НЕ ВЫПОЛНЕНО] всякий раз, когда происходит изменение в дочерних элементах ребенка. Я хочу создать новый список дочерних элементов (который автоматически приводит к изменениюсписок детей и, следовательно, будет генерировать новое состояние пользовательского интерфейса)

Есть идеи, как решить эту проблему?

...