RxJava:如何将对象列表转换为其他对象列表

2022-08-31 14:28:54

我有源对象列表,我需要将其转换为结果对象列表。

我可以使用ResultObject的方法将一个对象获取到另一个对象:

convertFromSource(srcObj);

当然,我可以这样做:

public void onNext(List<SourceObject> srcObjects) {
   List<ResultsObject> resObjects = new ArrayList<>();
   for (SourceObject srcObj : srcObjects) {
       resObjects.add(new ResultsObject().convertFromSource(srcObj));
   }
}

但是我将非常感谢那些能够展示如何使用rxJava做同样的事情的人。


答案 1

如果发出 ,则可以使用以下运算符:ObservableList

  • flatMapIterable(将列表转换为可观察的项目)
  • map(将您的项目转换为另一个项目)
  • toList运算符(将已完成的可观察量转换为可观察量,从已完成的可观察量发出项目列表)

    Observable<SourceObjet> source = ...
    source.flatMapIterable(list -> list)
          .map(item -> new ResultsObject().convertFromSource(item))
          .toList()
          .subscribe(transformedList -> ...);
    

答案 2

如果要维护源发出但转换内容,即 到 ,您可以执行如下操作:ListsObservableObservable<List<SourceObject>>Observable<List<ResultsObject>>

Observable<List<SourceObject>> source = ...
source.flatMap(list ->
        Observable.fromIterable(list)
            .map(item -> new ResultsObject().convertFromSource(item))
            .toList()
            .toObservable() // Required for RxJava 2.x
    )
    .subscribe(resultsList -> ...);

这确保了以下几点:

  • 将保留 发出的数目。即,如果源发出3个列表,则另一端将有3个转换后的列表ListsObservable
  • 使用将确保内部终止,以便可以使用Observable.fromIterable()ObservabletoList()

推荐