RxJava:如何将对象列表转换为另一个对象列表

新手上路,请多包涵

我有 SourceObjects 列表,我需要将其转换为 ResultObjects 列表。

我可以使用 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 执行相同操作的人。

原文由 Yura Buyaroff 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 737
2 个回答

如果您的 Observable 发出 List ,您可以使用这些运算符:

  • flatMapIterable (将您的列表转换为可观察的项目)
  • map (将您的项目转换为另一个项目)
  • toList 运算符(将完成的 Observable 转换为从完成的 Observable 发出项目列表的 Observable)
   Observable<SourceObjet> source = ...
  source.flatMapIterable(list -> list)
        .map(item -> new ResultsObject().convertFromSource(item))
        .toList()
        .subscribe(transformedList -> ...);

原文由 dwursteisen 发布,翻译遵循 CC BY-SA 3.0 许可协议

If you want to maintain the Lists by the source Observable but convert the contents, ie Observable<List<SourceObject>> to Observable<List<ResultsObject>> , you can do something像这样:

 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 -> ...);

这确保了一些事情:

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

原文由 Noel 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题