首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Single<Single<Data>>中将Single<Data>转换为RxJava2

在Single<Single<Data>>中将Single<Data>转换为RxJava2
EN

Stack Overflow用户
提问于 2019-02-02 20:12:35
回答 1查看 33关注 0票数 0

我从两个数据库表中获取值,在重复删除之后,基于它们从第三个表中获取值。我的示例代码是:

代码语言:javascript
复制
db.select("SELECT id from table1 ")
            .getAs(String.class)
            .collectInto(new HashSet<String>(), HashSet::add)
            .zipWith(db.select("SELECT id from table2 ")
                    .getAs(String.class)
                    .collectInto(new HashSet<String>(), HashSet::add),new BiFunction<Set,Set, Single<HashSet<String>>>() {
                        @Override
                        public Single<HashSet<String>> apply(Set t1, Set t2) throws Exception {
                            t1.addAll(t2);

                            return db.select("select useful_data from table3 where id IN ("+AsQuatedString(t1)+").getAs(String.class).collectInto(new HashSet<String>(), HashSet::add);
                        }
                    })/*Point A*/.subscribe(a -> a.subscribe(b -> System.out.println(b)));

所以问题是在A点,我得到的Single<Single<HashSet>>不能作为rest客户端的响应。

如何将其转换为Single<HashSet>

使用进行DB连接

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-02 21:54:27

您的zip应该返回一个带有合并集的Single<HashSet>,然后您可以将第二个数据库请求放在flatmap中。

代码语言:javascript
复制
db.select("SELECT id from table1 ")
        .getAs(String.class)
        .collectInto(new HashSet<String>(), HashSet::add)
        .zipWith(db.select("SELECT id from table2 ")
                .getAs(String.class)
                .collectInto(new HashSet<String>(), HashSet::add), (t1, t2) -> {
                    t1.addAll(t2);
                    return t1;
                })
        .flatMap(concatSet -> {
            // concatSet is a HashMap<String>
            return db.select("select useful_data from table3 where id IN ("+AsQuatedString(concatSet)+")
                    .getAs(String.class)
                    .collectInto(new HashSet<String>(), HashSet::add);
        })
        .subscribe(b -> { // b is a HashMap<String>, result of your second db request.
            System.out.println(b);
        });
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54497075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档