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

如何使用RxJava为集合中的每个元素并行调用方法

于捷
2023-03-14

我有以下两个方法,需要为列表中的所有名称并行调用findDetails(name)方法。如何使用RxJava实现这一点?基本上,我想在不同的线程中为集合中的每个元素调用findDetails方法。

public List<Bean> findStudentDetails(List<String> names){

        names.forEach(s->{
            findDetails(s);
         });

}


private Bean findDetails(String name){
           //some io operation
         } 

共有1个答案

孙熠彤
2023-03-14

使用应用的subscribeOn操作符,使您的方法返回可观察,然后返回平面图您的可观察

private Observable<Bean> findDetails(String name) {
    return Observable.fromCallable(() -> { //or any other creation method
        //some io operation
    }
}

public Observable<List<Bean>> findStudentDetails(List<String> names) {
    return Observable.from(names)
        .flatMap(s -> findDetails(s).subscribeOn(Schedulers.computation())
        .toList()
}

注意:计算Scheduler将线程计数限制为可用CPU内核的数量,以便在高强度操作中获得更好的性能。有关更多信息,请查看这个关于调度器的伟大答案-https://stackoverflow.com/a/31282775/7045114

还可以查看这篇关于并行化的文章-http://tomstechnicalblog.blogspot.ru/2015/11/rxjava-achieving-parallelization.html

 类似资料:
  • 问题内容: 假设我有汽车清单: 如何缩短上面的代码?简而言之,如何在List的每个元素上调用方法? 例如,在Python中: 问题答案: 更新: 有关使用lambda表达式的Java8解决方案,请参见aaiezza的答案。 Java 8之前的原始答案: 使用Guava可以实现效果,实现比您现有的更加冗长: (请记住,返回的视图将延迟应用该函数- 如果要立即复制,则需要将返回的列表复制到新列表中。)

  • 问题内容: 小写列表或集合的每个元素的最有效方法是什么? 我对清单的想法: 有没有更好,更快的方法?对于Set,此示例的外观如何?由于当前没有方法可以将操作应用于集合(或列表)的每个元素而无需创建其他临时集合? 这样的事情会很好: 谢谢, 问题答案: 对于列表,这似乎是一个非常干净的解决方案。它应该允许使用特定的List实现,以提供对于线性遍历列表和在恒定时间内替换字符串都是最佳的实现。 这是我可

  • 我在pyspark数据帧中有一个StringType()列和一个ArrayType(StringType())列。我想将StringType()列与ArrayType(StringType())列的每个元素合并 示例: 谢谢:)

  • 本文向大家介绍使用CSS为其父元素的第一个子元素的每个 元素设置样式,包括了使用CSS为其父元素的第一个子元素的每个 元素设置样式的使用技巧和注意事项,需要的朋友参考一下 要设置作为其父级第一个子级的每个<p>元素的样式,请使用CSS:first-child选择器。 示例 您可以尝试运行以下代码来实现:first-child选择器-

  • 如何使用8流对列表中的每个元素Java求和? 例如,我在一个列表中有3个不同的列表,我试图对每个列表中的每个元素求和,然后创建另一个列表。我不熟悉Java 8,尝试使用流API解决一些问题: 我正在努力实现的输出:

  • 问题内容: 我知道我可以测试set1是否是set2的子集: 但是以下内容也是正确的: 我如何考虑集合中元素发生的次数,以便: 我知道我可以做类似的事情: 但我想知道是否还有更简洁的方法或避免列表理解的方法。谢谢! 问题答案: @DSM删除了他的解决方案后,我将借此机会提供一个可以扩展的原型。