首页 > 解决方案 > 如何获取 concatWith 中使用的第一个 Flowable 的大小

问题描述

我有一个本地房间数据库用于缓存产生一个 Flowable,我连接一个远程 Flowable 以在我的视图中尽快获取更新。

return db.variantDao().getVariantsWithImageInCategory(categoryId)
    .flattenAsFlowable(s -> s)
    .zipWith(Flowable.range(0, Integer.MAX_VALUE),
        (item, counter) -> new PositionedItem<>(counter, item, true))
    .concatWith(remotes);

当我从遥控器 Flowable 获取更新的数据时,它可以工作,但现在可能会发生遥控器中的一个对象丢失,因此我需要在本地缓存和视图中删除它,所以我考虑再次连接可以这样流动

Flowable<PositionedItem<VariantWithImage>> del = Observable.range(REMOTES_SIZE, locals.subscribeOn(ioScheduler).blockingGet().size() ).map((a) ->
                (new PositionedItem<>(a, (VariantWithImage)null, true)))
    .toFlowable(BackpressureStrategy.BUFFER);

在视图中,我只会隐藏读取空数据的元素。但我的问题是我无法找到如何提取先前发出的 Flowable 的大小 - 由 REMOTES_SIZE 指示。至少对于视图,我认为这应该会有所帮助,而对于更新缓存,我希望找到某种方法来存储已从缓存中发出的对象列表,并在远程也看到它们时标记它们。

标签: javaandroidrx-javareactivex

解决方案


推荐阅读