Я работаю с этим кодом, мне нужно создать рекурсивный метод в rxjava, который возвращает и Observable, я основан на следующем коде:
public Observable<Item> getComments(final Item parentItem) {
if (parentItem.hasKids()) {
return Observable.merge(
Observable.just(parentItem),
Observable.fromArray(parentItem.getKids())
.flatMap(ids -> getItems(ids))
.flatMap(item -> {
item.indent = parentItem.indent + 1;
return getComments(item);
})
);
} else {
return Observable.just(parentItem);
}
}
Этот код предположительно должен выдавать список элементов, я новичок в rxjava, и у меня есть сомнения, как я могу использовать этот метод в другом, итерировать каждый элемент для представления информации.
Кроме того, это мой код:
private fun getItems(parentItem: Single<NavItem>, dCSServiceContext: DCSServiceContext): Observable<NavItem> {
return parentItem.map { it }.flatMapObservable {
if (it.hasChildren) {
Observable.merge(
Observable.just(it),
Observable.from(it.childrenIds).map { id ->
var list = arrayListOf<Int>()
list.add(id)
dCSServiceContext.contentIds = list
getNavItemById(dCSServiceContext)
}.flatMap { getItems(it, dCSServiceContext) })
} else {
Observable.just(it)
}
}
}
override fun getNavMenuItems(dCSServiceContext: DCSServiceContext): Observable<NavItem> {
return getItems(getNavItemById(dCSServiceContext), dCSServiceContext)
}
Я использую это таким образом:
override fun getSportList(dCSServiceContext: DCSServiceContext): Single<SportsResponse> {
return scribeService.getNavMenuItems(dCSServiceContext).toSingle().map { navMenu ->
SportsResponse(navMenu as NavMenu)
}
}
Но моя проблема в том, что я не могу перебрать каждый испущенный элемент, потому что я получаю ошибку: Observable испустил слишком много элементов. Я использовал метод: take (1), но проблема сейчас в том, что я получаю только первый элемент из коллекции, остальные опущены.
Спасибо заранее !!