2017-09-20 6 views
0

J'ai deux Flowable list et j'ai besoin de les combiner, appliquer certaines fonctions et obtenir Flowable list les listes Flowable initiales représentent des données de DB et l'idée est que lorsque dans la DB pourrait être des changements la liste combinée pourrait être changée ainsi que les entrées sont modifiées. Je suppose que le zip n'est pas la bonne approche car il fonctionne une fois terminé, c'est son travail et ne continue pas à émettre des changements. Ma question ce qui pourrait être une alternative de zip où je pouvais combiner 2 listes, appliquer certaines fonctions et continuer à écouter les mises à jourComment puis-je continuer à écouter les changements de 2 listes fluides dans la liste combinée?

Flowable.zip(shoppingListsRepository.loadCommonArticles(), shoppingListsRepository.loadShoppingListItems(shoppingListId), 
BiFunction<List<CommonArticle>, List<ShoppingListItem>, List<CommonArticle>> { 
commonArticles, shoppingListItems -> 
//apply some filters on these two list and return result 
    items 
}); 


fun loadCommonArticles(): Flowable<List<CommonArticle>> { 
return shoppingListDao.loadCommonArticles() 
} 

fun loadShoppingListItems(shoppingListId: 
Int):Flowable<List<ShoppingListItem>> { 
    return shoppingListDao.loadShoppingListItems(shoppingListId)} 

Répondre

1

Flowable.combineLatest(stream1, stream2, combineBiFunc) Envisager. Si stream1 se termine, stream2 génère toujours des émissions avec la dernière liste connue de stream1 (et vice versa). Dans le combineBiFunc, vous pouvez décider quoi faire avec les données mises à jour.

+0

Merci, ça marche @Jon –