[英]How to filter one observable stream using another stream's element attribute as criteria using RxJava?
我正在使用兩個具有扁平數據結構的存儲庫,例如。 “ MenuItemRepo”和“ IngredientRepo”。 它們之間的關系結構是:一個MenuItem可以包含許多配料,而單個Ingredient(例如奶酪)可以成為許多MenuItem的一部分。 數據庫表的建模如下:
MenuItem表條目
MenuItem-成分參考表條目
成分表輸入
我可以使用RxJava從[MenuItem流]中選擇MenuItem元素,這些菜單項的ID與[MenuItem-Ingredient參考流]中的特定成分ID匹配嗎?
我使用.filter()運算符在一個Flowable流中基於其自身的屬性選擇元素(例如,獲取所有不含麩質的成分):
mIngredientsRepo.getItems()
.flatMap(Flowable::fromIterable)
.filter(ingredient-> ingredient.isGlutenFree)
.toList() ....
這是獲得所有無麩質成分的列表。 但是在這種情況下,MenuItem流不存儲成分ID。 本質上,我想看看是否可以進行類似SQL的JOIN過濾,以及使用RxJava是否可以保持這種效果。
目前,我已經在存儲庫級別使用SQLite連接語句實現了。 我想探索RxJava中更直觀,更可維護的選項。
PS:此數據結構用於本地和遠程,也用於Firebase,這就是結構平坦的原因之一。
您可以collect()
這些成分ID collect()
到HashSet
,然后在menuitem流中將filter()
與contains
使用:
mIngredientsRepo.getItems()
.flatMapIterable(v -> v)
.collect(HashSet::new, (a, b) -> a.add(b.id))
.flatMapPublisher(set -> menuitems.filter(mi -> set.contains(mi.id))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.