Android 我是否可以获取项目列表并基于id获取唯一列表,并将两个列表合并为一个可流动列表?
我从数据库中获取ShoppingList项目列表 每个项目都有recipeId,例如,如果我有10个shoppinglist项目 其中8个可以有相同的recipeId,其余的shoppinglist项目可以有另一个recipeId。这意味着10个项目可以代表2个食谱。 所以我拿了10个购物清单上的商品,然后我有10个回执。我应该保留唯一的RecipeID在这种情况下,我们有2个RecipeID,然后获得该RecipeID的配方,注意:我需要显示10个购物清单项目和2个配方 我可以用Flowable获取所有这些信息吗, 或者我需要订阅shoppingListItems,然后根据此列表在单独的flowable中创建唯一RecipeID列表Android 我是否可以获取项目列表并基于id获取唯一列表,并将两个列表合并为一个可流动列表?,android,rx-java,rx-android,rx-java2,Android,Rx Java,Rx Android,Rx Java2,我从数据库中获取ShoppingList项目列表 每个项目都有recipeId,例如,如果我有10个shoppinglist项目 其中8个可以有相同的recipeId,其余的shoppinglist项目可以有另一个recipeId。这意味着10个项目可以代表2个食谱。 所以我拿了10个购物清单上的商品,然后我有10个回执。我应该保留唯一的RecipeID在这种情况下,我们有2个RecipeID,然后获得该RecipeID的配方,注意:我需要显示10个购物清单项目和2个配方 我可以用Flowabl
如果可能的话,哪种解决方案是最好的比方说,您有购物物品,并且希望获取每个独特的Receid信息: 环境:: rxjava2.0.7 assertJ 3.8.0 - 此代码将recepId和每个recepId的请求分组到recep中,并将结果连接回ShoppingItem
@Test
void name() {
Observable<Tuple2<ShoppingListItem, Recep>> tuple = getFromDb().flatMapIterable(i -> i)
.groupBy(shoppingListItem -> shoppingListItem.recepId)
.flatMap(g -> {
Observable<Recep> recep = getRecep(g.getKey());
return Observable.combineLatest(recep, g, (recep1, shoppingListItem) -> {
return Tuple.of(shoppingListItem, recep1);
});
});
TestObserver<Tuple2<ShoppingListItem, Recep>> test = tuple.test()
.assertValueCount(4)
.assertComplete()
.assertNoErrors();
List<Tuple2<ShoppingListItem, Recep>> values = test.values();
assertThat(values).extracting("_1").extracting("recepId").contains(0, 1);
assertThat(values).extracting("_1").extracting("id").containsExactly(0, 1, 2, 3);
assertThat(values).extracting("_2").extracting("id").containsExactly(1, 1, 0, 0);
}
Observable<List<ShoppingListItem>> getFromDb() {
List<ShoppingListItem> shoppingListItems = Arrays.asList(
new ShoppingListItem(0, 1),
new ShoppingListItem(1, 1),
new ShoppingListItem(2, 0),
new ShoppingListItem(3, 0)
);
return Observable.just(shoppingListItems);
}
Observable<Recep> getRecep(int id) {
return Observable.just(new Recep(id));
}
class Recep {
private final int id;
public Recep(int id) {
this.id = id;
}
}
class ShoppingListItem {
private final int id;
private final int recepId;
public ShoppingListItem(int id, int recepId) {
this.id = id;
this.recepId = recepId;
}
}
返回分组对象中的ShoppingItems列表和Receps列表:
@Test
void name() {
Observable<Items> itemsObservable = getFromDb().flatMapSingle(shoppingListItems -> {
List<Integer> collect = shoppingListItems.stream().map(i -> i.recepId)
.distinct()
.collect(Collectors.toList());
return Observable.fromIterable(collect).flatMap(this::getRecep)
.toList()
.zipWith(Single.just(collect), (receps, integers) -> {
return new Items(receps, shoppingListItems);
});
});
TestObserver<Items> test = itemsObservable.test()
.assertValueCount(1)
.assertComplete()
.assertNoErrors();
Items items = test.values().get(0);
assertThat(items.receps).hasSize(2);
assertThat(items.shoppingListItems).hasSize(4);
}
Observable<List<ShoppingListItem>> getFromDb() {
List<ShoppingListItem> shoppingListItems = Arrays.asList(
new ShoppingListItem(0, 1),
new ShoppingListItem(1, 1),
new ShoppingListItem(2, 0),
new ShoppingListItem(3, 0)
);
return Observable.just(shoppingListItems);
}
Observable<Recep> getRecep(int id) {
return Observable.just(new Recep(id));
}
class Items {
private final List<Recep> receps;
private final List<ShoppingListItem> shoppingListItems;
Items(List<Recep> receps, List<ShoppingListItem> shoppingListItems) {
this.receps = receps;
this.shoppingListItems = shoppingListItems;
}
}
class Recep {
private final int id;
public Recep(int id) {
this.id = id;
}
}
class ShoppingListItem {
private final int id;
private final int recepId;
public ShoppingListItem(int id, int recepId) {
this.id = id;
this.recepId = recepId;
}
}
请提供您的数据结构类好吗?@Hans Wurst第一个表包含shoppinListId、productName、recipeId,第二个表包含recipeId、recipeName、Ingreements。为什么不通过两个以上的sql联接一次获取所有信息tables@Hans首先,我从DB获取购物清单,但我从服务器获取食谱谢谢你的帮助,但是我假设它返回了shoppinglist和recipe元组,虽然我需要10个shoppinglist项和2个唯一配方项,但我添加了另一个解决方案