¿Cómo hacer llamadas observables recursivas en RxJava?

Soy bastante nuevo enRxJava (y paradigma reactivo en general), así que tengan paciencia conmigo.

Supongamos que tengo estoNews y esta anidadaComment estructura de datos:

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;
  }
}

y supongamos que tengo este punto final de API:

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

Ahora, supongamos:

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, [])

** **

Ahora si tengoNews n = News(99, [1,2]), ¿cómo hago para que todos sus hijos comenten recursivamente? es decir, para obtener comentarios con ID [1,2,3,4,5,6]?

** **

He buscado y tropezado con esto:https://jkschneider.github.io/blog/2014/recursive-observables-with-rxjava.html

Esta es la función de recursión:

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()));
    }
}

Muestra un ejemplo sobre cómo hacer llamadas observables recursivas, pero la función interna (f.listFiles()) es una operación de bloqueo (no devuelve otro Observable). En mi caso, la función interna (getComments) es una función sin bloqueo que devuelve otros Observables. ¿Cómo puedo hacer eso?

Cualquier ayuda será muy apreciada.

Respuestas a la pregunta(1)

Su respuesta a la pregunta