我有两个方法,需要为列表中的所有名称并行调用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
}
答案 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