Rx java 如何从列表中获取一些数据,并在RxJava中使用这些数据创建另一个列表

Rx java 如何从列表中获取一些数据,并在RxJava中使用这些数据创建另一个列表,rx-java,Rx Java,我有一个例子,我从API中得到了一个对象。此对象包含ArrayList。此ArrayList包含的对象包含我需要作为另一个列表的数据 我有这个代码,它工作得很好 Observable<SomePresentationModel> observable = apiService.getData() .map(data -> { List<Foo> foo = new ArrayList<>(); for (Bar bar :

我有一个例子,我从API中得到了一个对象。此对象包含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);
    });
Observable-Observable=apiService.getData()
.map(数据->{
List foo=new ArrayList();
for(Bar:data.getbar()){
foo.addAll(bar.getSomething());
}
返回asPresentationModel(foo);
});

但它看起来很糟糕,我相信有办法做得更好,但我不知道怎么做,有什么想法吗?

您可以使用
flatMapIterable
/
toList
从列表中发出项目,然后重新生成列表(见下文)。请注意,
toList
仅在
apiServiceService.getData()
返回一个完整的
可观察的
时才有效。否则,它将不会发出列表

Observable<SomePresentationModel> observable = apiService.getData()
              .flatMapIterable(data -> data.getBars())
              .map(elt -> elt.getSomething())
              .toList()
              .map(foo -> asPresentationModel(foo)); 
Observable-Observable=apiService.getData()
.flatMapIterable(数据->数据.getBars())
.map(elt->elt.getSomething())
托利斯先生()
.map(foo->asPresentationModel(foo));

您可以使用
flatMapIterable
/
toList
从列表中发出项目,然后重新生成列表(请参见下文)。请注意,
toList
仅在
apiServiceService.getData()
返回一个完整的
可观察的
时才有效。否则,它将不会发出列表

Observable<SomePresentationModel> observable = apiService.getData()
              .flatMapIterable(data -> data.getBars())
              .map(elt -> elt.getSomething())
              .toList()
              .map(foo -> asPresentationModel(foo)); 
Observable-Observable=apiService.getData()
.flatMapIterable(数据->数据.getBars())
.map(elt->elt.getSomething())
托利斯先生()
.map(foo->asPresentationModel(foo));