Я работаю с некоторыми рекурсивными вызовами в rx java, у меня проблемы с выполнением и успешным достижением рекурсии.
Прежде всего, у меня есть этот метод:
override fun get(context: DCSServiceContext): Single<List<DCSItem?>> {
val dcsUrl = dcsURL(context.contentIds, context.contentOrigin)
val httpContext = HttpJsonServiceContextImpl(URL(dcsUrl), context.transaction)
return httpService.get(httpContext).map {
val content = it["Content"]
return@map content.map(dcsItemFactory::create)
}
}
Я должен сделать что-то вроде следующего кода:
private fun buildNavItems(dCSServiceContext: DCSServiceContext): Single<MutableList<Item>> {
return dCSService.get(dCSServiceContext).map { itemsResponse ->
val items: MutableList<Item> = arrayListOf()
itemsResponse.forEach { item ->
val transformedItem = buildItem(item!!)
if (item?.collections?.get("NavItems") != null) {
dCSServiceContext.contentIds = item?.collections?.get("NavItems")
//Alternative 2: Recursion to fill the internal items, this code is not been called now.
buildNavItems(dCSServiceContext).map { childrenItems ->
val section = Section("", "", false,childrenItems )
val data = Data(section)
val children = Children(data)
transformedItem.children = children
items.add(transformedItem)
}
} else {
val transformedItem = buildItem(item!!)
items.add(transformedItem)
}
}
return@map items
//Single.just(items)
}
}
По сути, идея заключается в том, чтобы делать рекурсивные вызовы каждый раз, когда условие:
if (item?.collections?.get("NavItems")
будет истинным, и это может бытьнесколько раз, поэтому мне приходится создавать эти элементы с подэлементами в этих итерациях.
Но теперь у меня возникают проблемы при попытке сделать работу, вызываемую этими вызовами, я знаю, что это можно сделать и с Observable, ноУ меня проблемы с приведением данных к параметрам, которые нужны наблюдателю.
Есть идеи?
Большое спасибо!