4

我无法真正理解何时使用 flatmap 而不是 map,也找不到一个很好的例子。
你能想出一个好的场景来选择平面地图而不是地图吗?
谢谢。

4

1 回答 1

4

例如,我们想通过 web 执行 2 个请求,A 和 B。但是,请求 B 必须在请求 A 完成后请求,因为请求 B 需要请求 A 的一些结果。这是一个很好的场景flatMap。示例代码如下:

interface Movie {

}

interface UserInfo {
    List<Long> getFavoriteMovies();
}

public Observable<UserInfo> requestUserInfo(long userId) {
    // ...
}

public Observable<List<Movie>> requestMovieList(List<Long> movieIds) {
    // ...
}

public Observable<List<Movie>> requestUserMovieList(long userId) {
    return requestUserInfo(userId).flatMap(new Func1<UserInfo, Observable<List<Movie>>>() {
        @Override
        public Observable<List<Movie>> call(UserInfo user) {
            return requestMovieList(user.getFavoriteMovies());
        }
    });
}

此外,Ben Christensen 的幻灯片中有一些 RxJava 的好例子:https ://speakerdeck.com/benjchristensen/rxjava-goto-aarhus-2013

于 2014-06-09T08:18:37.753 回答