Как сделать рекурсивный наблюдаемый вызов в RxJava?

Я новичок вRxJava (и реактивная парадигма в целом), поэтому, пожалуйста, потерпите меня.

Предположим, у меня есть этоNews и это вложенноеComment структура данных:

public class News {
  public int id;
  public int[] commentIds; //only top level comments
  public News(int id, int[] commentIds) {
    this.id = id;
    this.commentIds = commentIds;
  }
}

public class Comment {
  public int id;
  public int parentId; //ID of parent News or parent comment
  public int[] childIds;
  public Comment(int id, int parentId, int[] childIds) {
    this.id = id;
    this.parentId = parentId;
    this.childIds = childIds;
  }
}

и предположим, что у меня есть эта конечная точка API:

getComments(int commentId) //return Observable<Comment> for Comment with ID commentId

Теперь давайте предположим:

getComments(1); //will return Comment(1, 99, [3,4])
getComments(2); //will return Comment(2, 99, [5,6])
getComments(3); //will return Comment(3, 1, [])
getComments(4); //will return Comment(4, 1, [])
getComments(5); //will return Comment(5, 2, [])
getComments(6); //will return Comment(6, 2, [])

**

Теперь, если у меня естьNews n = News(99, [1,2])Как я могу получить все его дочерние комментарии рекурсивно? то есть чтобы получить комментарии с ID [1,2,3,4,5,6]?

**

Я искал и наткнулся на это:https://jkschneider.github.io/blog/2014/recursive-observables-with-rxjava.html

Это функция рекурсии:

public class FileRecursion {
    static Observable<File> listFiles(File f) {
        if(f.isDirectory())
            return Observable.from(f.listFiles()).flatMap(FileRecursion::listFiles);
        return Observable.just(f);
    }

    public static void main(String[] args) {
          Observable.just(new File("/Users/joschneider/Desktop"))
                  .flatMap(FileRecursion::listFiles)
                  .subscribe(f -> System.out.println(f.getAbsolutePath()));
    }
}

Он показывает пример того, как делать рекурсивные наблюдаемые вызовы, но внутреннюю функцию (f.listFiles()) является блокирующей операцией (не возвращает другой наблюдаемой). В моем случае внутренняя функция (getComments) - неблокирующая функция, которая возвращает другие наблюдаемые. Как я могу это сделать?

Любая помощь будет высоко ценится.

Ответы на вопрос(1)

Ваш ответ на вопрос