我正在使用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也可以这样做,但是我在将数据转换为观察者所需的参数时遇到了问题。
有什么想法吗?
非常感谢!