android - api调用之前的RxJava转换请求类型
问题描述
我有一个用户列表(想象 POJO 用户的 ID 为 int,名称为字符串),我想进行 API 调用,将 ID 列表而不是用户列表作为参数传递。所以,正如我所拥有的那样:
List<Integer> usersIDs = new ArrayList<>();
usersList.stream().forEach(user -> users.add(users.getId()));
Single.fromCallable(() -> api.downloadData())
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe();
但我想在 RxJava 调用本身中转换这个列表,在链内部使用一个运算符,就像我们使用它来转换、映射、过滤等等结果列表一样。
有办法吗?谢谢
解决方案
那这个呢?
您可以Observable#fromIterable
按顺序使用从User
到Integer
(id) 的转换。这是通过应用来完成的toList
。这只能在有限流上完成,因为当Observable
从不发送onComplete
. 在您的情况下,这是可能的,因为 aList
始终是有限的。
class So65424108 {
@Test
void so65424108() {
List<User> users = Arrays.asList(new User(1, "Hans"), new User(2, "Wurst"));
Api api = new ApiImplStub();
TestScheduler testScheduler = new TestScheduler();
ReactiveApi reactiveApi = new ReactiveApi(api, testScheduler);
TestObserver<Boolean> test = Observable.fromIterable(users)
.map(user -> user.userId)
.toList()
.flatMap(reactiveApi::downloadData)
.observeOn(testScheduler)
.test();
testScheduler.triggerActions();
test.assertComplete().assertValue(false);
}
interface Api {
Boolean downloadData(List<Integer> ids);
}
static final class ApiImplStub implements Api {
@Override
public Boolean downloadData(List<Integer> ids) {
return false;
}
}
static final class ReactiveApi {
private final Api api;
private final Scheduler scheduler;
ReactiveApi(Api api, Scheduler scheduler) {
this.api = api;
this.scheduler = scheduler;
}
public Single<Boolean> downloadData(List<Integer> ids) {
return Single.fromCallable(() -> api.downloadData(ids))
.subscribeOn(scheduler);
}
}
static final class User {
final int userId;
final String name;
User(int userId, String name) {
this.userId = userId;
this.name = name;
}
}
}
推荐阅读
- python-3.x - 绑定魔法方法似乎不再适用于 python 3
- sql - 为什么所有记录都没有通过 SQL 中的数据库进程从一个数据库获取到另一个数据库?
- apache-spark - 找不到 LoginModule 类:org.apache.kafka.common.security.plain.PlainLoginModule
- c# - 如何与包含使用 c++ 程序和 c# 程序创建的 time_t 类型的结构共享内存映射文件?
- python-3.x - 我正在使用 Azure Microsoft 进行 text_to_text 翻译,但它会抛出错误,例如提供有效凭据
- c++ - 基于指针类型的模板函数重载?
- r - R中“合并”方法的Python等价物是什么
- sql - SQL Server:用 0 填充不存在的行的 MAX(column) 值
- ios - iPad Dock 出现时是否会发送通知?
- wordpress - 使用帖子类别查询类别模板上的帖子