2 回答
TA贡献1876条经验 获得超6个赞
分组 observable 是 AFAIK 的正确方法。就个人而言,如果您图片中“按类型拆分”和“合并所有内容”之间的任何内容是异步的,那么在 RX 中执行此操作肯定有很多优点,例如重试逻辑、缓冲、错误处理、背压等。如果它是常规的非异步代码,我猜这是个人喜好。您可以使用 RX 来完成,但您也可以使用常规同步代码在“按类型拆分”和“合并所有内容”之间执行所有操作。
无论您选择哪种方式,拆分代码以使其更具可读性始终是一个好主意,这样您就可以像阅读您附加的图像一样轻松地“阅读流程”。
TA贡献1830条经验 获得超3个赞
只是另一种可能适合您的方法的想法:您可以多播源并单独处理分支,而不是分组/toMap。
例子:
@Test
public void multicastingShare() {
final Observable<Integer> sharedSource = Observable.range(1, 10)
.doOnSubscribe(dummy -> System.out.println("subscribed"))
.share();
// split by some criteria
final Observable<String> oddItems = sharedSource
.filter(n -> n % 2 == 1)
.map(odd -> "odd: " + odd)
.doOnNext(System.out::println);
final Observable<String> evenItems = sharedSource
.filter(n -> n % 2 == 0)
.map(even -> "even: " + even)
.doOnNext(System.out::println);
// recombine the individual streams at some point
Observable.concat(oddItems, evenItems)
.subscribe(result -> System.out.println("result: " + result));
}
添加回答
举报