首页 > 解决方案 > 需要在后台生成的可迭代的 RxJava Observable

问题描述

我想要一个来自可迭代的 Observable,它每次都返回列表的一部分,但问题是我需要从另一个可观察对象异步生成该列表,我该怎么做?

Observable.fromIterable(getListAsync())
        .buffer(3, 3) 
        .subscribe()

标签: rx-javarx-java2rx-android

解决方案


经过一番搜索,我所做的是

private Observable<List<Object>> generateListObservable() {
    return Single.create(emitter -> {
        ArrayList<Integer> aInteger = new ArrayList<>();
        aInteger.add(1);
        aInteger.add(2);
        aInteger.add(3);
        aInteger.add(4);
        aInteger.add(5);
        aInteger.add(6);
        emitter.onSuccess(aInteger);
    }).flattenAsObservable(o -> (Iterable<? extends List<Object>>) o);
}

之后,我有一个可以与其他方法结合使用的 Observable;在这里,我使用 Zip 一次返回一个包含 2 个元素的列表,每个元素之间有 1 秒的延迟

private void displayListInChunks(){
    Observable.zip(generateListObservable().buffer(2),
            Observable.interval(1, TimeUnit.SECONDS),
            (o, aLong) -> o).subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread()).subscribe(lists ->
        Toast.makeText(MainActivity.this, lists.toString(), Toast.LENGTH_SHORT).show());    
}

推荐阅读