Я собираюсь выстроить ответ Максима Волгина здесь.(Спасибо)
Я полагаю, у вас есть несколько наблюдаемых потоков, которые вы хотите объединить в список элементов.Я разобью это на две части.
Объединение потоков в один.Это можно выполнить с помощью операторов zip, merge или flatMap в зависимости от порядка / поведения Zip Doc Merge Doc FlatMap .
Преобразование данных из отдельных элементов в список.Это может быть достигнуто с помощью toList ()
. Я бы также предложил не использовать переменные / наблюдаемые для вызовов Retrofit, а Singles.
Код в конечном итоге будет выглядеть следующим образом:
Kotlin:
fun example(): Single<List<CurrencyStamp >> {
val count = secByDay.div(secByFiveMin)
return Observable
.range(0, count)
.flatMapSingle { curr ->
// This should be giving you back a Single
CoinApi.getCompareApi().getCurrencyHistory(symbol,
date.getTime() - curr.mul(secByFiveMin),
convertsSymbols)
}.toList()
}
Java:
Single<List<CurrencyStamp>> sample() {
val count = secByDay / secByFiveMin;
return Observable
.range(0, count)
.flatMapSingle((Function<Integer, SingleSource<String>>) curr ->
// This should be giving you back a Single
CoinApi.getCompareApi().getCurrencyHistory(symbol,
date.getTime() - (curr * secByFiveMin),
convertsSymbols))
.toList();
}
** Редактировать:Также вы должны обрабатывать ошибки в потоке, которые могут иметь ошибки (например, сетевой вызов). Ознакомьтесь с этой средней статьей, в которой говорится об этом Статья об обработке ошибок