#rx-java
#rx-java
Вопрос:
Мне нужна помощь в создании этого наблюдаемого. Я хочу:
- Получить
Observable<FilmInfo>
изUser
идентификатора - Из этого
FilmInfo
идентификатора извлекитеFilm
- После завершения верните an
Observable<UserFilm>
, который содержит обаFilmInfo
иFilm
У меня есть это:
@Override
public Observable<UserFilm> filmsForUser(final User user) {
return infoStore.filmsInfoForUser(user.id())
.flatMap(new Func1<FilmInfo, Observable<Film>>() {
@Override
public Observable<Film> call(final FilmInfo info) {
return filmsStore.get(info.id());
}
}).map(new Func1<Film, UserFilm>() {
@Override
public UserFilm call(Film film) {
//I need "info" here!
}
});
}
Здесь у меня есть an Observable<Film>
, но мне нужно сопоставить его с an Observable<UserFilm>
. Проблема в том, что я не могу использовать info
переменную для построения UserFilm
. Я пробовал, combineLatest
но я не знаю, как его точно использовать.
Ответ №1:
Используйте перегрузку с 2 аргументами flatMap
:
@Override
public Observable<UserFilm> filmsForUser(final User user) {
return infoStore
.filmsInfoForUser(user.id())
.flatMap(filmInfo -> filmsStore.get(info.id()), (filmInfo, film) -> {
// use filmInfo, film here!
});
}
Ответ №2:
Понял!
@Override
public Observable<UserFilm> filmsForUser(final User user) {
return infoStore.filmsInfoForUser(user.id()).flatMap(new Func1<FilmInfo, Observable<UserFilm>>() {
@Override
public Observable<UserFilm> call(FilmInfo info) {
return Observable.combineLatest(Observable.just(info), filmsStore.get(info.id()),
new Func2<FilmInfo, Film, UserFilm>() {
@Override
public UserFilm call(FilmInfo filmInfo, Film film) {
//I have all I need here!
}
});
}
});
}