Rx java2 从Flowable中修改每个项目<;列表<;项目>&燃气轮机;取决于另一种流动性<;列表<;项目2>&燃气轮机;在RxJava中

Rx java2 从Flowable中修改每个项目<;列表<;项目>&燃气轮机;取决于另一种流动性<;列表<;项目2>&燃气轮机;在RxJava中,rx-java2,Rx Java2,我的房间数据库中有3种方法 Flowable<List<Book>> getBooks() {....} Flowable<List<Author>> getAuthors(int bookId) {....} Flowable<List<Category>> getCategories(int bookId) {....} Flowable getBooks(){….} 可流动的getAuthors(int bookId

我的房间数据库中有3种方法

Flowable<List<Book>> getBooks() {....}
Flowable<List<Author>> getAuthors(int bookId) {....}
Flowable<List<Category>> getCategories(int bookId) {....}
Flowable getBooks(){….}
可流动的getAuthors(int bookId){….}
可流动的getCategories(int bookId){….}
书的对象

Book {int id; List<Author> authors; List<Category> categories}
Book{int id;列出作者;列出类别}
我正在尝试做一些类似的事情

Flowable<List<Book>> getBookFullBooks() {
    return getBooks()
    //1. get the list of books from flowable??
    //2. get each book from the list??
    //3. set properties of each book from getAuthors(book.id) and 
    //   getCategories(book.id)
    // Something like:
        .switchMap(book -> _getCategories(book.id).map(categories -> {
            book.categories = categories;
            return book;
        }))
       .switchMap(book -> _getAuthors(book.id).map(authors -> {
           book.authors = authors;
           return book;
       }));// collect the books into a sequentioal Flowable<List<Book>>
}
//4. then return all the books as Flowable<List<Book>>
可流动的getBookFullBooks(){
返回getBooks()
//1.从flowable获取图书列表??
//2.从列表中获取每本书??
//3.从getAuthors(book.id)和
//getCategories(book.id)
//比如:
.switchMap(book->u getCategories(book.id).map(categories->{
book.categories=类别;
还书;
}))
.switchMap(book->u getAuthors(book.id).map(authors->{
book.authors=作者;
还书;
}));//将这些书收集成一个连续的流动系统
}
//4. 然后将所有的书籍按流动方式归还

我一直试图这样做,但没有任何成功。我们怎么能这样做呢?

我会这样做

getBooks()
    .flatMapSingle(bookList -> Flowable.fromIterable(bookList)
        .flatMap(book -> getCategories(book.id)
            .map(categories -> {
                   book.setCategories(categories);
                   return book;
            }))
        .flatMap(book -> getAuthors(book.id)
            .map(authors -> {
                   book.setAuthors(authors);
                   return book;
             }))
          .toList())
    .subscribe(bookList -> {
        // done
    });
我认为它第一次不起作用,因为您的
Flowable
没有完成并且
toList()
卡住了。尝试嵌套flatMaps,它不应该工作,因为
Flowable.fromIterable()
在完成循环后完成

我创建了这样的测试,效果很好

这会保留“bookList”的顺序吗?我在添加后尝试了该代码。toFlowable(由于函数返回flowable)订阅者没有获得任何可流动的值它在更改时不断发出值,还是可以观察到?如果这是第一次,它将不起作用,请稍候,我将编辑我的答案,您为什么要在任何地方使用
toFlowable()
?使用采用
Publisher
的flatMap版本,您将不需要任何转换,是的,它将保留订单