重复请求 X 次或直到返回 Y 项
Repeat a request X number of times or till Y items is returned
我在创建具有以下条件的 Observable 时遇到了问题:
- 从 API 中获取项目。 API 可以 return 0 到 10 个项目。
- 如果 return 编辑的项目少于 10 个,请从 API 请求更多项目。
- 重复 5 次或直到收集到 10 件或更多物品。
到目前为止我有这个 Observable:
fetchData().flatMapIterable { dataList }
.distinct()
.filter { --some filtering--- }
.repeat(5)
.take(10)
.toList()
这个工作正常,有一点挑剔。如果 API returns 9 项然后 10 项,Observable returns 10 项。剩下的 9 个被丢弃,我不希望这样。有什么办法让它那样工作吗?
将其收集到跨多个步骤共享的列表中并执行有条件的重复:
Single.defer {
var list = ArrayList<T>()
var count = AtomicInteger()
fetchData()
.flatMapIterable { dataList }
.distinct()
.filter { --some filtering--- }
.collectInto(list, { list, item -> list.add(item) })
.repeatUntil { list.size() >= 10 || count.getAndIncrement() > 4 }
.ignoreElements()
.andThen(Single.just(list))
}
我在创建具有以下条件的 Observable 时遇到了问题:
- 从 API 中获取项目。 API 可以 return 0 到 10 个项目。
- 如果 return 编辑的项目少于 10 个,请从 API 请求更多项目。
- 重复 5 次或直到收集到 10 件或更多物品。
到目前为止我有这个 Observable:
fetchData().flatMapIterable { dataList }
.distinct()
.filter { --some filtering--- }
.repeat(5)
.take(10)
.toList()
这个工作正常,有一点挑剔。如果 API returns 9 项然后 10 项,Observable returns 10 项。剩下的 9 个被丢弃,我不希望这样。有什么办法让它那样工作吗?
将其收集到跨多个步骤共享的列表中并执行有条件的重复:
Single.defer {
var list = ArrayList<T>()
var count = AtomicInteger()
fetchData()
.flatMapIterable { dataList }
.distinct()
.filter { --some filtering--- }
.collectInto(list, { list, item -> list.add(item) })
.repeatUntil { list.size() >= 10 || count.getAndIncrement() > 4 }
.ignoreElements()
.andThen(Single.just(list))
}