将一个list均分成n个list

编程中的需求

分批处理一块大数据: 例如,从(Excel ,txt ,数据库 )中一行一行的读数据,最终读了1W+数据,然后对这1W+数据又要进行业务处理,一条一条的遍历太慢了。可以把这个大的list拆成n个,然后用n个线程去跑,这样效率就会快很多。下述代码就是其中用到关于的一个工具类: 把一个List均分成n个小的list

思路详解

入参:一个大的list

出参:n个小的list

思路:像小学做除法一样。 10/3=3余1. 10条数据,分成3个list,那每个list分3个还多1个,那只有前面的都多分1个,第一个list分3个然后加1个余数等于4个。第2个list分3个,然后最后一个list分3个。代码如下,可以直接拷贝运行

解决方案

/**

* 将一个list均分成n个list

* @param source

* @return

*/

publicstaticList

>averageAssign(Listsource,intn){

List

>result=newArrayList

>();

intremainder=source.size()%n;//先计算出余数

intnumber=source.size()/n;//然后是商

intoffset=;//偏移量(用以标识加的余数)

for(inti=;i

Listvalue;

if(remainder>){

value=source.subList(i*number+offset, (i+1)*number+offset+1);

remainder--;

offset++;

}else{

value=source.subList(i*number+offset, (i+1)*number+offset);

}

result.add(value);

}

returnresult;

}

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180814G13F5P00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

同媒体快讯

扫码关注云+社区

领取腾讯云代金券