当前位置: 首页 > 知识库问答 >
问题:

我可以获取项目列表,并基于id获得唯一列表,并在一个流动的两个列表?

卫成和
2023-03-14

我可以在Flowable中获取所有这些信息吗?或者我需要订阅shoppingListItems,然后在单独的Flowable中基于这个列表有唯一的recipeID列表

如果可能的话,哪一个是最好的解决方案

共有1个答案

冯宪
2023-03-14

假设,您有购物项目,并且您希望获取每个唯一的接收器信息:

环境::

>

  • Rxjava 2.0.7

    @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;
        }
    }
    
    @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;
        }
    }
    

  •  类似资料:
    • 问题内容: 我有一个看起来像这样的列表列表: 删除重复列表的最佳方法是什么?使用上面的示例,我正在寻找会产生这种情况的代码: 我最初以为我可以使用,但这似乎不适用于列表列表。我还看到了一个使用的示例,但是代码对我来说并不完全清楚。谢谢您的帮助! 问题答案: uniq_animal_groups = set(map(tuple, animal_groups)) 尽管您将得到一组元组而不是一组列表,但

    • 问题内容: 我想创建一个(或一组)所有出现在python列表中的唯一值的列表。我有这样的事情: 我想要以下内容: 我知道对于字符串列表,您只能使用set(aList),但是我无法弄清楚如何在列表列表中解决此问题,因为set(aList)会向我显示错误消息 我该如何解决? 问题答案:

    • 问题内容: 请考虑下表: 在这里,我要找回它们是具有独特组合的记录,和。如果存在两个或多个这些字段的唯一组合,我想选择其中的第一个。 作为上表数据的示例,我需要的输出是 (由于记录3和4具有相同的组合,我想只记录3,因为它是第一次出现) 我可以使用一条SQL语句执行此操作吗? 问题答案:

    • 问题内容: 我有 我想要 问题答案:

    • 问题内容: 我试图了解获取列表的内容并将其附加到另一个列表是否有意义。 我通过循环功能创建了第一个列表,该列表将从文件中获取特定行并将其保存在列表中。 然后使用第二个列表保存这些行,并在另一个文件上开始新的循环。 我的想法是在for循环完成后获取列表,将其转储到第二个列表中,然后开始一个新的周期,将第一个列表的内容再次转储到第二个列表中,但追加它,因此第二个列表将我循环中创建的所有较小列表文件的总

    • 问题内容: 我在此论坛和Google中搜索后发布了查询,但无法解决相同的问题。 我正在尝试根据列表1中的值过滤列表2(多列)。 码 在上面的代码中,如果我提供特定值,则可以过滤,但不确定如何检查列表2中的Car Name是否在列表1中退出。 希望我面对的问题很清楚,等待指导(对于Java来说还是比较新的,因此,如果上述查询非常基础,请原谅)。 编辑, 我相信上面提供的链接3应该可以解决,但就我而言

    • rank ▲ ✰ vote url 65 357 50 683 url 合并两个列表 怎样合并两个列表? 例如: listone = [1,2,3] listtwo = [4,5,6] 我期待: mergedlist == [1, 2, 3, 4, 5, 6] 在Python中非常容易. mergedlist = listone + listtwo