【发布时间】:2018-01-20 21:54:55
【问题描述】:
我有具体要求。我有主题作为用户的源 ID。我需要使用 id 来下载用户的数据。但是当我稍后收到相同的用户 ID 时,我需要取消旧订阅(未完成时)并订阅新的 Observable。我需要每个 id 的 switchMap 运算符,但 switchMap 仅适用于一个值。我想同时下载所有用户的数据(并发) - flatMap。
【问题讨论】:
标签: rx-java2
我有具体要求。我有主题作为用户的源 ID。我需要使用 id 来下载用户的数据。但是当我稍后收到相同的用户 ID 时,我需要取消旧订阅(未完成时)并订阅新的 Observable。我需要每个 id 的 switchMap 运算符,但 switchMap 仅适用于一个值。我想同时下载所有用户的数据(并发) - flatMap。
【问题讨论】:
标签: rx-java2
使用groupBy沿id进行拆分,在做flatMap时在每个组上使用switchMap:
ids.groupBy(v -> v)
.flatMap(g -> g.switchMap(id -> download(id)), false, Integer.MAX_VALUE)
(如果组数超过默认并行度,则存在 MAX_VALUE。)
【讨论】:
groupBy 不知道何时丢弃“旧”组。使用take/takeUntil限制组的寿命。