我从改装请求中获得了Flowable。 我需要在构造时从多个请求中获得一个对象,例如Observable>:
public static Observable<List<CurrencyStamp>> getStampByDay(String symbol, Date date, String... convertsSymbols){
long count = 0;
Observable<List<CurrencyStamp>> result = null;
while (count < secByDay){
Flowable<CurrencyStamp> item = CoinApi.getCompareApi().getCurrencyHistory(symbol, date.getTime() - count,
convertsSymbols).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
count += secByFiveMin;
}
return result;
}
我需要哪些运算符?
答案 0 :(得分:2)
我将在这里最大化Maximm Volgin的答案。 (谢谢)
我相信您想将多个可观察的流合并为一个项目列表。我将其分为两部分。
将流合并为一个。可以使用zip,merge或flatMap运算符来完成此操作,具体取决于顺序/行为Zip Doc Merge Doc FlatMap。
将数据从单个项目转换为列表。这可以通过toList()
我也建议不要在改装调用中使用flowables / Observables,而应使用Singles。
代码最终将看起来类似于:
科特琳:
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();
}
**编辑:同样,您应该在可能有错误的流中处理错误(例如网络呼叫),请查看有关该问题的中型文章Error handling article
答案 1 :(得分:1)
类似
Observable
.range(/* */)
.flatMap (count) -> { CoinApi
.getCompareApi(/**/)
.toObservable()
}
.toList()