转换单 >到单 在RxJava2

问题描述 投票:0回答:1

我从2个数据库表和重复删除后根据他们从第三个表中读取取值。我的示例代码:

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>>我不能给作为响应休息客户端。

如何将其转换为Single<HashSet>

使用this为DB连接

rx-java2
1个回答
1
投票

你的拉链应该返回一个Single<HashSet>与合并集,然后你可以把你的flatmap第二个数据库的请求。

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);
        });
© www.soinside.com 2019 - 2024. All rights reserved.