问题
我需要创建这样的操作:
get all elements from DB -> send call to API that these elements are marked as read -> save status of read elements
我试图与RxJava建立一个良好的链条,我想:
List<Integer>
创建了Observable List<Integer>
问题是从第3点开始传播和分组.4。我不知道如何制作这样一个链。正如您在下面看到的那样,我使用我的代码坚持第3点,因为我不知道如何为每个请求收集数据。在我的案例中是否存在某种可能有用的转换?
实际进展又名代码
sub = getDb()
.createQuery(DbContract.Notification.TABLE_NAME, sql, String.valueOf(NOTIFICATION_UNREAD))
.map(new CursorListMapper<>(new NotificationPersistenceModel()))
.map(new Func1<List<DataNotification>, Observable<List<Integer>>>() {
@Override
public Observable<List<Integer>> call(List<DataNotification> notifications) {
List<Integer> ids = new ArrayList<>();
for (DataNotification notification : notifications) {
ids.add(notification.getRemoteId());
}
return Observable.just(ids);
}
})
.subscribe();
修改
Observables
列表似乎是一个坏主意 - 改为Observable<List<Integer>>
答案 0 :(得分:1)
不是映射到Observable<List<Integer>>
,而是映射到List<Integer>
,然后使用Observable.from()
将列表转换为发出每个列表元素的Observable。接下来你只需将其映射到Api调用。这是一个例子
getDb()
.createQuery(...)
.map(...)
.map(...) // map to List<Integer>
.flatMap(new Func1<List<Integer>, Observable<List<Response>>>() {
@Override
public Observable<List<Response>> call(List<Integer> integers) {
return Observable.from(list)
.flatMap(new Func1<Integer, Observable<Response>>() {
@Override
public Observable<Response> call(Integer integer) {
return api.call(integer);
}
})
.toList();
}
})
比你可以继续映射/ flatMapping到你想要实现的任何目标