将列表的Observable转换为Observable列表并在RxJava中合并

Sel*_*nir 4 java android rx-java rx-java2

我正在通过创建Hacker News阅读器应用程序来使用Android学习Java。

我想做的是:

  1. 请求完成/topstoriesObservable<List<int>>,向发送请求,返回,发出。
  2. 将每个映射storyIdObservable<Story>
  3. List<Story>当所有请求完成时,将Observables合并为一个实体,该实体发出。

和代码:

  private Observable<Story> getStoryById(int articleId) {
    BehaviorSubject<Story> subject = BehaviorSubject.create();
    // calls subject.onNext on success
    JsonObjectRequest request = createStoryRequest(articleId, subject);
    requestQueue.add(request);
    return subject;
  }

  public Observable<ArrayList<Story>> getTopStories(int amount) {
    Observable<ArrayList<Integer>> topStoryIds = (storyIdCache == null)
      ? fetchTopIds()
      : Observable.just(storyIdCache);

    return topStoryIds
      .flatMap(id -> getStoryById(id))
      // some magic here
  }
Run Code Online (Sandbox Code Playgroud)

然后,我们将这样使用:

getTopStories(20)
  .subscribe(stories -> ...)
Run Code Online (Sandbox Code Playgroud)

elm*_*bea 5

你可以尝试这样的事情

Observable<List<Integers>> ids = getIdsObservable();
Single<List<Story>> listSingle =
            ids.flatMapIterable(ids -> ids)
            .flatMap(id -> getStoryById(id)).toList();
Run Code Online (Sandbox Code Playgroud)

然后,您可以订阅该Single以获取 List<Story>