我正在使用此代码,我需要在rxjava中创建一个返回且可观察的递归方法,我基于下一个代码:
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),但是现在的问题是,我只从集合中获得了第一项,而省略了其他项。
提前谢谢!