我尝试合并5个网络调用以获取所需对象列表,然后在UI上的单独列表中显示:
通过网络上的一些教程,我创建了5 Observables
并在之后合并了他们的排放:
Observable<FruitResponse> apples=
_fruits.getApples(store_id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
...
Observable<FruitResponse> pears =
_fruits.getPears(store_id)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread());
List<Observable<FruitResponse>> observables = new ArrayList();
observables.add(apples);
observables.add(bananas);
observables.add(oranges);
observables.add(kiwis);
observables.add(pears);
Observable
.merge(observables)
.toList()
.single()
.subscribe(new Observer<List<FruitResponse>>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(List<FruitResponse> list) {
ArrayList<Fruit> fruit_list = new ArrayList<Fruits>();
for (FruitResponse f : list) {
fruit_list.get(0).getName()); // -- always different
}
}
});
问题在于每次执行代码时发出的对象的顺序都不同,我需要按照上面描述的特定顺序获取列表,因此我将知道每个对象的相关内容(列表苹果或香蕉等)并能够正确地将它推到Adapter
。
答案 0 :(得分:0)
使用from timeit import timeit
data = "lst = ['one', 'two', 'three'] * 1000; max_length = 12345678"
print(timeit('q, r = divmod(max_length, len(lst)); q * lst + lst[:r]',
data,
number=10))
print(timeit('list(islice(cycle(lst), max_length))',
data + '; from itertools import cycle, islice',
number=10))
代替concat()