想象一下,我有一个服务来检索一些作者(id,名字,姓氏,生日,国籍)和第二个服务来检索作者的书(标题,摘要,页数)。 我希望我的网络电话会给我一份带有他们书籍的作者名单。
为了说明,我的服务会返回AuthorOResponse和BookResponse,我想发出一个Observable of AuthorObject。
public class AuthorResponse {
private String id;
private String firstname;
private String lastname;
private Date birthday;
private String nationality;
}
public class BookResponse {
private String title;
private String summary;
private int pageNumber;
}
public class AuthorObject {
private String id;
private String firstname;
private String lastname;
private Date birthday;
private String nationality;
private List<BookObject> books
}
我的服务就像是
Observable<List<AuthorResponse>> getAuthors()
Observable<List<BookResponse>> getAuthorBooks(String authorId)
我想用它们来发出一个Observable,但由于我对getAuthorBooks的每次调用都需要一个作者,所以无法弄明白怎么做。
我想出了一些看起来像这样的东西,但我有一个问题,因为我的concatMap让我&#34;松散&#34;我的作者。
myServices.getAuthors()
.map(author -> createAuthor())
.concatMap(author -> mWebService.getAuthorBooks(author.getId())
.flatMapIterable(data -> data.items)
.map(book -> addBook())
有人知道我该怎么做吗?
答案 0 :(得分:6)
您可以使用专为此类情况设计的special flatMap
overload:
myServices.getAuthors()
.map(author -> createAuthor())
.flatMap(author -> mWebService.getAuthorBooks(author.getId()),
(author, data) -> {
author.setBooks(data.items));
return Observable.just(author);
})
.toList() //here is your Observable<List<Author>>