当前位置: 首页 > 知识库问答 >
问题:

RxJava api调用扩展项列表和返回列表中的每个项

冷俊健
2023-03-14

我使用改型2,我正在学习RxJava。我从某处下载了一个项目列表。我想对每个项目进行api调用,并创建扩展项目的新列表。两个调用都返回一个可观察的。它看起来像这样:

getItemsService.getItems()
            .concatMap(Observable::from)
            .map(item -> new ExtendedItem(item, someOtherService.getDetails(item.somedetail)))
            .toList()
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(activity);

详细服务:

public interface IGetDetailsService {
@GET(BuildConfig.GET_DETAILS_ENDPOINT)
Observable<Detail> getDetails(@Query("q") String someDetail);

}

问题是get细节返回一个可观察的,我不能用它来构造扩展项。在rxJava链中,更改get细节调用以返回对象不起作用,我猜是因为它将结果返回给主线程。如何获取对象本身?我尝试了很多其他的方法,但到目前为止都没有成功。

共有1个答案

范鸿
2023-03-14

您可以使用flatMap的一种变体:

...
            .concatMap(Observable::from)
            .flatMap(item -> someOtherService.getDetails(item.somedetail), (item, detail) -> new ExtendedItem(item, detail))
            .toList()
...
 类似资料:
  • 问题内容: 我想将一个字符串添加到列表中: 但它打印。这是为什么? 问题答案: 该函数是就地函数,即它将对原始列表本身进行更改。来自文档 通过添加 给定 列表中的所有项目来扩展列表;等效于a [len(a):] =L。 因此,您无需将其重新分配回列表变量。 你可以做 然后当您打印时 更好的方法 如下所述使用是更好的方法。

  • 本文向大家介绍Dapper.NET 列表扩展,包括了Dapper.NET 列表扩展的使用技巧和注意事项,需要的朋友参考一下 示例 数据库查询中的一个常见情况IN (...)是在运行时在此处生成列表。大多数RDBMS对此没有一个很好的隐喻-并且没有通用的跨RDBMS解决方案。相反,dapper提供了一些温和的自动命令扩展。所需要的只是提供的参数值IEnumerable。涉及的命令@foo将扩展为(@

  • 我在Python中进行多元线性回归,但由于某种原因,系数没有正确返回为列表。相反,将返回列表中的列表: 这将返回列表[]的列表中的值,而不是列表[]。知道为什么会这样吗?输出: 但这行得通: 输出:

  • 问题内容: 让 假设我要对列表中每个列表的索引元素求和,例如在矩阵列中添加数字以获得单个列表。我假设数据中的所有列表的长度均相等。 如何遍历列表列表而不会出现索引超出范围错误?也许lambda?谢谢! 问题答案: 您可以尝试以下方法: 这里使用的组合和解压的列表,然后根据自己的索引压缩的项目。然后,您可以使用列表推导来遍历相似索引的组,对其进行求和并返回其“原始”位置。 为了更清楚一点,下面是迭代

  • 问题内容: 是否可以为列表理解中的每个项目返回2个(或更多)项目? 我想要的(示例): 应该回来 因此,可以替换以下代码块: 问题答案: 时间: 2.69210777094 3.13900787874 1.62461071932 25.5944058287 29.2623711793 25.7211849286

  • 我有一个方法返回一个