我从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连接
你的拉链应该返回一个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);
});