如何从列表中获取一些数据并在RxJava中创建包含该数据的另一个列表

时间:2016-05-31 15:27:22

标签: rx-java

我有我从API获得一个Object的情况。该对象包含ArrayList。这个ArrayList包含了我需要的数据作为另一个列表。

我有这个代码,它工作得很好

Observable<SomePresentationModel> observable = apiService.getData()
    .map(data -> {
      List<Foo> foo = new ArrayList<>();
      for (Bar bar : data.getBars()) {
        foo.addAll(bar.getSomething());
      }
      return asPresentationModel(foo);
    });

但它看起来很糟糕,我确信有一些方法可以做得更好,但我不知道如何,有什么想法?

1 个答案:

答案 0 :(得分:3)

您可以使用flatMapIterable / toList从列表中发出项目,然后重建列表(请参阅下面的内容)。请注意,toList仅在apiServiceService.getData()返回完成的Observable后才有效。否则,它不会发出列表。

Observable<SomePresentationModel> observable = apiService.getData()
              .flatMapIterable(data -> data.getBars())
              .map(elt -> elt.getSomething())
              .toList()
              .map(foo -> asPresentationModel(foo));