当前位置: 首页 > 知识库问答 >
问题:

使用RxJava/RxAndroid迭代列表

邵兴怀
2023-03-14

我对RxJava/RxAndroid还不熟悉,但我一直坚持使用我的用例。

我尝试迭代一个列表

我成功地转换了整个列表,然后收到了我的列表

我尝试了from的运算符,但如果我使用from(List

这是我的代码如何转换整个列表

private List<A> listOfA;

private startConversion() {
    Observer observer = new Observer<List<B>>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {
            e.printStackTrace();
        }

        @Override
        public void onNext(List<B> convertedItems) {
            onConversionCompleted(convertedItems);
        }
    };

    Observable<B> observervable = Observable.fromCallable(new Callable<List<B>>() {
        @Override
        public List<B> call() throws Exception {
            return convertListOfAToListOfB(listOfA);
        }
    });

    subscription = observable
                .subscribeOn(Schedulers.newThread())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);
}

PS:这是伪代码。

谢谢你的帮助!


共有3个答案

姜俊友
2023-03-14

您还可以使用Observable。fromIterable(list)从列表中创建可观察对象列表。然后可以迭代这些项并将其转换为列表。

 Observable.fromIterable(list)
            .filter(item -> item.getId().equals("SampleId")
            .toList();
尹乐邦
2023-03-14

给你。。举个简单的例子:

public static void main(String[] args) {
    String[] s = {"a", "b", "c"};
    Observable.from(s).map(value -> "A"+value).subscribe(result -> System.out.println(result));
    Observable.timer(2, TimeUnit.SECONDS).toBlocking().subscribe();
}

正如您提到的list,为了简单起见,我使用了一个数组,甚至list也可以用作from()的参数

贺劲
2023-03-14

如果您想在单独的线程中逐个转换每个项目,可以这样做。

    Observable.from(list)    
            .map(input -> {
                // transform each A -> B
            })
            .subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(item -> {

            });

如果您已经有可观察的发射列表,并希望将其转换为序列,请使用以下选项:

        listObservable
            .flatMap(Observable::from)
            .subscribe(item -> {

            });

如果要将这两种方法结合起来,并在一个位置转换所有值,但要逐个发射它们,可以执行以下操作:

    Observable.create(subscriber -> {
        for (Item item : items) {
            subscriber.onNext(transformA2B(item));
        }

        subscriber.onCompleted();
    });
 类似资料:
  • 为什么我们需要将RxAndroid与RxJava一起使用?它们与实际使用RxAndroid和RxJava之间的功能差异是什么?我找不到合适的答案。

  • 我试图学习RXJAVA为Android。部分是有意义的,我仍然对许多其他部分感到困惑,但是,给我一些时间,我希望这一切会更有意义。 目前,我在“地图”功能方面遇到了问题。我收到一个错误,但不知道如何解决它。 在分享我的代码之前,我会解释我的理解。。简单地说。。可观察的——发出数据的代码。Observer——处理发出数据的代码。Map——接收A型数据并将其作为B型返回的代码。 所以,记住这一点: 在

  • 我正在尝试用selenium编写脚本,它将在某些链接上输入每个add,然后单击每个广告页面中的按钮。我很难让脚本决定如何转到一个广告,然后再转到另一个。所讨论的链接是 下面是帖子列表:[![在这里输入图片描述][1][1] 脚本应该输入add,点击reply按钮,然后移动到另一个add。[![enter image description here][2][2]以下是我迄今为止完成的脚本:

  • 我已经阅读了很多关于rxjava调度器的答案,比如下面的用例,调度器io和调度器计算,rxjava2调度器io和具有大并发请求的调度器计算之间的区别是什么。 最常见的解释是使用Schedulers.computation()进行CPU密集型工作 并使用调度程序。io()用于与文件系统交互、与数据库或服务交互、REST API调用 通过CPU密集型工作,我假设/考虑图像调整大小/操作,大数据集等(如

  • 我是RxJava新手,发现它对于Android应用程序中的网络和数据库处理非常有用。 我有两个无法在RxJava中完全实现的用例 用例1 清除我的目标数据库表表A 从表B中获取包含关键字字段的数据库记录列表 对于从表B检索到的每一行,调用远程API并将所有返回的数据持久化到表a中 我管理过的最接近的代码是 用例2 清除我的目标数据库表Table X 清除我的目标数据库表Table Y 从表Z中获取

  • 问题内容: 我试图根据当前正在另一个列表上迭代的索引显示来自其他列表的值,但无法弄清楚如何访问各个项目。 如你所见,我尝试使用它,但是它什么也不显示,它只是创建一个空的表头元素。 我的其他数组在视图中的定义如下,如果删除,则可以看到整个数组已打印到表头 如果我错过任何必填信息,请告诉我。 问题答案: 听起来你想同时遍历两个列表,换句话说就是zip()列表。 如果是这种情况,最好在视图中进行操作并在