我该如何构建这个Observable?

时间:2016-10-06 18:27:11

标签: rx-java

我需要帮助构建这个Observable。我想要:

  1. Observable<FilmInfo>的ID
  2. 获取User
  3. 根据FilmInfo的ID,检索Film
  4. 完成后,返回包含Observable<UserFilm>FilmInfo
  5. 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,但我不知道如何使用它。

2 个答案:

答案 0 :(得分: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!
        });
}

答案 1 :(得分: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!
                        }
                    });
        }
    });
}