我已经发布了他们分别工作的所有方法,但是我遇到了第一个方面的问题,我在那里使用了两个flowables
=IF(A1<>B1,"Partial",IF(A1="","InComplete","Complete"))
更新方法:userStores()用于收藏夹和其他商店,
return userFavouriteStores()
.concatWith(userOtherStores())
.doOnNext(new Consumer<List<StoreModel>>() {
@Override
public void accept(@io.reactivex.annotations.NonNull List<StoreModel> storeModels) throws Exception {
Log.i("storeModels", "" + storeModels);
}
})
public Flowable<List<StoreModel>> userFavouriteStores() {
return userStores()
.map(UserStores::favoriteStores)
.flatMap(storeId -> storeDao.storesWithIds(storeId))
.map(stores -> { // TODO Konvert to Kotlin map {}
List<StoreModel> result = new ArrayList<>(stores.size());
for (se.ica.handla.repositories.local.Store store : stores) {
result.add(store.toStoreModel(StoreModel.Source.Favourite));
}
return result;
}); }
public Flowable<List<StoreModel>> userOtherStores() {
return userStores().map(UserStores::otherStores)
.flatMap(storeId -> storeDao.storesWithIds(storeId))
.map(stores -> {
List<StoreModel> result = new ArrayList<>(stores.size());
for (Store store : stores) {
result.add(store.toStoreModel(StoreModel.Source.Other));
}
return result;
});}
答案 0 :(得分:1)
根据评论跟进和其他信息,您没有专门针对concat()
的问题,我认为它是有效的,它不是您想要在这里实现的工具。
concat()
不会将两个列表连接到一个列表,但是首先会先发送所有项目Flowable
,然后只发出第二个Flowable
发出的项目(因此你必须{ {1}}如此结束将知道onComplete
何时结束,我在开始时提出的问题。
为了将列表组合在一起,我建议将两个商店Flowable
(收藏夹/其他)压缩,然后简单地组合到列表以获得组合列表的单个输出。
除此之外,正如您所指出的那样,由于两个存储Obesrvable
来自Observable
,您将两次调用网络请求,这绝对不是必需的。您可以使用userStores()
来解决它,它会将网络结果共享并多播到publish()
,从而产生单个网络请求。
总结一下,我宁愿建议在这里使用Single,而不是Observable
,因为你没有背压奉献。类似于以下实现:
Flowable