将Observable发出的值传递给不同的对象,同时组合它

时间:2018-01-02 13:14:00

标签: rx-java reactive-programming rx-java2

我想传递3个对象中的每个发射值,对于一个对象,我们基本上可以像往常一样:

Observable.just(KV("1", "Alex"), KV("2", "LeBron"), KV("3", "Kobe"), KV("1", "Kevin"))
.flatMapCompletable(keyValue -> doSth(keyValue))

但是对于其他人我想分组(KV :: getKey)然后收集(例如,concat值)。

Observable.just(KV("1", "Alex"), KV("2", "LeBron"), KV("3", "Kobe"), KV("1", "Kevin"))
.groupBy(KV::getKey)
.collect(Result::new, (acc, keyVal) -> acc.add(keyVal.getVal()))
.flatMapCompletable(result -> writeResultSomeWhere());

我如何在1个链中做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:0)

你可以publish主要来源:

Observable.just(KV("1", "Alex"), KV("2", "LeBron"), KV("3", "Kobe"), KV("1", "Kevin"))
.publish(o -> Completable.merge(
    o.flatMapCompletable(keyValue -> doSth(keyValue)),
    o.groupBy(KV::getKey)
       .collect(Result::new, (acc, keyVal) -> acc.add(keyVal.getVal()))
       .flatMapCompletable(result -> writeResultSomeWhere())
));