这实际上与文章中描述的相同:
Observable<Comment> getInnerComments(Comment comment) { if (comment.childIds.length > 0) return Observable.merge( Observable.just(comment), Observable.from(comment.childIds) .flatMap(id -> getComments(id)) .flatMap(this::getInnerComments)); return Observable.just(comment);}public static void main(String[] args) { getComments(1) .flatMap(this::getInnerComments) .subscribe(c -> System.out.println(comment.toString()));}我先从id =
1的评论开始,然后将其传递给
getInnerComments()。该
getInnerComments()检查如果评论有孩子。如果是这样,它将遍历每个子ID(
Observable#from),并使用您的
getComments(int)API
加载每个子ID
。然后,将每个孩子传递给,
getInnerComments()以执行相同的过程。如果评论中没有子项,则使用会立即将其返回
Observable#just。
这是伪代码,尚未经过测试,但是您应该明白这一点。
下面是一个如何获取所有评论,然后将其汇总为一个示例的示例
List<Comment>。
getNews(99) .flatMap(news -> Observable.from(news.commentIds)) .flatMap(commentId -> getComments(commentId)) .flatMap(comment -> getInnerComments(comment)) .toList() .subscribe(commentList -> { });


