У меня возникли проблемы с созданием Observable со следующими условиями:
Пока у меня есть этот Observable:
fetchData().flatMapIterable { dataList }
.distinct()
.filter { --some filtering--- }
.repeat(5)
.take(10)
.toList()
Это работает нормально, с одной придиркой. Если API возвращает 9 элементов, а затем 10 элементов, Observable возвращает 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))
}
Ах хорошо. Я уже пробовал что-то в этом роде, но мне не нравился отдельный список и подсчет вне потока.