【问题标题】:Combination FlatMap and SwitchMap结合 FlatMap 和 SwitchMap
【发布时间】:2018-01-20 21:54:55
【问题描述】:

我有具体要求。我有主题作为用户的源 ID。我需要使用 id 来下载用户的数据。但是当我稍后收到相同的用户 ID 时,我需要取消旧订阅(未完成时)并订阅新的 Observable。我需要每个 id 的 switchMap 运算符,但 switchMap 仅适用于一个值。我想同时下载所有用户的数据(并发) - flatMap。

【问题讨论】:

    标签: rx-java2


    【解决方案1】:

    使用groupBy沿id进行拆分,在做flatMap时在每个组上使用switchMap

    ids.groupBy(v -> v)
    .flatMap(g -> g.switchMap(id -> download(id)), false, Integer.MAX_VALUE)
    

    (如果组数超过默认并行度,则存在 MAX_VALUE。)

    【讨论】:

    • 你能告诉我如何应用 operator ignoreElements 来避免内存泄漏吗?因为 id 的来源几乎可以是无限的。
    • 你想忽略什么?
    • State 类队列中的键 K 缓存了多少类型 T 的项?没有这个缓存可以使用 groupBy 吗?我有大量的物品T。
    • 如果您正确使用组,则不会缓存任何组。但是,组键会被缓存,因此如果您有一百万个 id,所有这些都将被保留,直到您用完 id。这是因为第 500.000 个 id 可能是重复的,groupBy 不知道何时丢弃“旧”组。使用take/takeUntil限制组的寿命。
    猜你喜欢
    • 2018-09-16
    • 2015-03-26
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    相关资源
    最近更新 更多