合并多个调用以保留顺序

时间:2016-10-04 22:56:02

标签: java android rx-java rx-android

我尝试合并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

1 个答案:

答案 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()

http://reactivex.io/documentation/operators/concat.html