如何在 RxJava 中将两个对象合并到一个对象中?

How can I combine two object in one of the object in RxJava?

我有 Data 和 DataDetail classes,它们中的每一个都包含比它们更近的数据 不包含。 我有从后端获取的列表 class, 拥有具有 id 字段的数据,我可以请求 DataDetail,而 DataDetail 具有一些在 Data 对象中为空的信息,因此我可以从 DataDetail 获取并在 Data class 中设置。

`fetchData()
.toFlowable()
.flatMapIterable(datas->datas).map(new Function<Data, Flowable<DataDetail>>() {
@Override
 public Flowable<DataDetail>`apply(@io.reactivex.annotations.NonNull Data data) throws Exception {
return
  

fetchDataDetail(data()).toFlowable(); }}) .map(new Function<DataDetail, Flowable<Data>>() { @覆盖 public Flowable<DataDetail> apply(@io.reactivex.annotations.NonNull DataDetail dataDetail) 抛出异常{<br> return //我想要访问数据和dataDetail对象}}) .toList();

.地图()?在地图中作为参数,我得到了 Flowable 的 DataDetail 对象, Flowable 但我需要同时访问 Data 和 DataDetail 才能从 DataDetail 获取一些数据并在 Data 对象中设置

我相信这就是您的 api 返回的内容。

api.getList() // this returns a Single<List<Data>>

如果这是正确的,这可能就是您要实现的目标。

Single<List<Pair<Data,Detail>>> dataSingle = api.getList()
    .toFlowable()
    .flatMap(Flowable::fromIterable) // Convert the list to single emissions
    .flatMap(data -> {
            // Make api call to get details 
            return api.getDetails(data.getId())
                .flatMap(dataDetails -> {
                    return Flowable.just(Pair.create(data,dataDetail));
                });
        }).toList();

显然,如果您需要将其转换为 Flowable ,您可以使用 toFlowable.

轻松完成

Pair 来自 android.support.v4.util.Pair。理想情况下,您创建一个单独的模型来表示来自 datadetail 的数据。但作为快速破解,您可以使用 Pair

希望对您有所帮助。