Retrofit2 RxAndroid+;改造2,获得一份图书清单

Retrofit2 RxAndroid+;改造2,获得一份图书清单,retrofit2,rx-android,Retrofit2,Rx Android,所以,假设我需要为Android应用程序获取最喜爱的书籍列表 我有id列表,但一次只能获取一本书,因此,我实际上没有bookAPI.getFavoriteBooks(ListofFavoriteId)方法调用(服务器没有该方法的端点),但我必须为列表中的每个id调用bookAPI.getBook(id),以获取所有喜爱的书籍,在我得到它们之后,我应该返回一个包含结果的列表 到目前为止,我找到的答案假设我可以调用一个方法可观察的getFavoriteBooks(列表ID),但在本例中我没有这个方法

所以,假设我需要为Android应用程序获取最喜爱的书籍列表

我有id列表,但一次只能获取一本书,因此,我实际上没有
bookAPI.getFavoriteBooks(ListofFavoriteId)
方法调用(服务器没有该方法的端点),但我必须为列表中的每个
id
调用
bookAPI.getBook(id)
,以获取所有喜爱的书籍,在我得到它们之后,我应该返回一个包含结果的列表

到目前为止,我找到的答案假设我可以调用一个方法
可观察的getFavoriteBooks(列表ID)
,但在本例中我没有这个方法


使用RxAndroid和改型2有没有办法解决这个问题?

很难从您的问题中判断这是否符合您的需要,但您可以尝试:

Observable.fromIterable(listOfIds)
            .flatMap(new Function<Integer, ObservableSource<Book>>() {
                @Override
                public ObservableSource<Book> apply(Integer integer)
                                                     throws Exception {
                    return bookApi.getBook(id);
                }
            })
            .toList()
只需确保为您的用例使用正确的调度程序


(请小心,因为此订阅呼叫不会处理错误,但我想您可以很容易地找到答案)

很难从您的问题中判断这是否符合您的需要,但您可以尝试:

Observable.fromIterable(listOfIds)
            .flatMap(new Function<Integer, ObservableSource<Book>>() {
                @Override
                public ObservableSource<Book> apply(Integer integer)
                                                     throws Exception {
                    return bookApi.getBook(id);
                }
            })
            .toList()
只需确保为您的用例使用正确的调度程序


(请小心,因为此订阅调用不会处理错误,但我想您可以很容易地找到答案)

Life saver。成功了,谢谢!尽管我读了更多关于函数式java的书,但我认为将getBook()映射到整数列表更容易;类似于map(getBook,ids)的东西,并从那里开始工作,但您的答案出现在测试我的想法之前(通过阅读本文,这看起来太简单了),它工作了,所以,再次感谢!救生员。成功了,谢谢!尽管我读了更多关于函数式java的书,但我认为将getBook()映射到整数列表更容易;类似于map(getBook,ids)的东西,并从那里开始工作,但您的答案出现在测试我的想法之前(通过阅读本文,这看起来太简单了),它工作了,所以,再次感谢!