使用多线程获取大量数据集合中的关键数据
2017-10-30 19:33
330 查看
/** * 将一个list均分成n个list * @param source * @return */ public <T> List<List<T>> averageAssign(List<T> source,int n){ List<List<T>> result=new ArrayList<List<T>>(); int remaider=source.size()%n; //(先计算出余数) int number=source.size()/n; //然后是商 int offset=0;//偏移量 for(int i=0;i<n;i++){ List<T> value=null; if(remaider>0){ value=source.subList(i*number+offset, (i+1)*number+offset+1); remaider--; offset++; }else{ value=source.subList(i*number+offset, (i+1)*number+offset); } result.add(value); } return result; }
class MyCallable implements Callable<Object> { private List<Map<String,Object>> els; private List<Map<String,Object>> elsend=new ArrayList<>(); private String content; MyCallable(List<Map<String,Object>> els,String content) { this.els = els; this.content = content; } public Object call() throws Exception { for (int i = 0; i < els.size(); i++) { Map<String, Object> stringObjectMap = els.get(i); String el = (String) stringObjectMap.get("el"); if(content.indexOf(el)!=-1){ elsend.add(stringObjectMap); } } return elsend; } }
调用代码片段
List<List<Map<String,Object>>> elsArr = averageAssign(els,10); // 创建一个线程池 ExecutorService pool = Executors.newFixedThreadPool(elsArr.size()); // 创建多个有返回值的任务 List<Future<List<Map<String,Object>>>> list = new ArrayList<Future<List<Map<String,Object>>>>(); for (int i = 0; i < elsArr.size(); i++) { Callable c = new MyCallable(elsArr.get(i),content); // 执行任务并获取Future对象 Future f = pool.submit(c); list.add(f); } // 关闭线程池 pool.shutdown(); // 获取所有并发任务的运行结果 for (Future<List<Map<String,Object>>> f : list) { List<Map<String,Object>> l = f.get(); for (int i = 0; i < l.size(); i++) { Map<String, Object> stringObjectMap = l.get(i); elsend.add(stringObjectMap); } } pbdDocument.setEls(elsend);
相关文章推荐
- python分别使用多线程和多进程获取所有股票实时数据
- 区分异步和多线程应用场景(IO操作包括获取网络数据用异步,大量耗时的计算用线程)
- java原生数据队列的简单使用,可变数据集合,遍历过程中动态添加数据并能在后续遍历过程中获取
- handlebars获取json数据(集合对象中嵌套集合对象)each嵌套使用
- rails ruby 中对于使用Savon请求web service 获取到大量json数据的处理
- js获取ModelAndView值方案并使用js求数据集合在并集
- python量化分析系列之---python分别使用多线程和多进程获取所有股票实时数据
- python分别使用多线程和多进程获取所有股票实时数据
- 大量数据窗口使用小技巧
- 使用ASP.NET Atlas ItemView控件显示集合中的单个数据
- 使用JDBC4.0操作XML类型的字段(保存获取xml数据)的方法
- 在vb中使用Iphlpapi.dll获取网络信息 第四章 第三节 实例一:网络数据流量图
- 用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份
- 用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份
- 游标使用——获取每个分类的前10条数据
- 使用VB实现Excel自动获取外部数据
- 用Java线程获取优异性能(II)——使用同步连载线程访问关键代码部份
- 使用AJAX异步获取数据
- Hibernate获取数据方式与缓存使用
- 使用属性获取文本值的集合