2016-10-06 4 views
0

私はObservableを構築するのに助けが必要です。私がしたい:Observableをどのように構築できますか?

  1. Film
  2. 完了したら、両方FilmInfoFilm
含ま Observable<UserFilm>を返す取得し、Sのid 'は FilmInfoからのID
  • ' UserからObservable<FilmInfo>を取得します

    私はこれを持っています:

    @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

    flatMapの2引数のオーバーロードを使用します。

    @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! 
             } 
            }); 
         } 
        }); 
    } 
    
    関連する問題