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

时间:2017-03-15 08:43:32

标签: rx-java

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

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

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

}


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

1 个答案:

答案 0 :(得分:2)

让您的方法返回Observable,然后使用已应用flatMap运算符Observables 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核心数,以便在紧张的操作中获得更好的性能。有关更多信息,请查看有关Schedulers - https://stackoverflow.com/a/31282775/7045114

的优秀答案

另请参阅有关并行化的文章 - http://tomstechnicalblog.blogspot.ru/2015/11/rxjava-achieving-parallelization.html