2016-10-06 3 views
0

Мне нужна помощь в создании этого наблюдаемого. Я хочу:Как я могу построить это наблюдение?

  1. Получить Observable<FilmInfo> из User 'ид s
  2. С этого FilmInfo' ид s, считывают Film
  3. После завершения возвращает 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! 
       } 
      }); 
} 

Здесь у меня есть Observable<Film>, но мне нужно сопоставить его с 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! 
     }); 
} 
0

Понял!

@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! 
         } 
        }); 
     } 
    }); 
} 
Смежные вопросы