Java 实现将List平均分成若干个集合
1.初衷是由于调用银行接口的批量处理接口时,每次最多只能处理500条数据,但是当数据总数为510条时。我又不想第一次调用处理500条,第二次调用处理10条数据,我想要的是每次处理255条数据。
下面展示的是我的处理方法
2.写了一个简单的ListUtils:
packagecom.example.springboottest.common.util; importjava.util.ArrayList; importjava.util.Collections; importjava.util.List; importcom.google.common.collect.Lists; /** *List工具类 *@authorNeo *@date2018年4月16日13:13:37 */ publicclassListUtils{ /** *将一个List均分成n个list,主要通过偏移量来实现的 * *@paramsource源集合 *@paramlimit最大值 *@return */ publicstaticList >averageAssign(List
source,intlimit){ if(null==source||source.isEmpty()){ returnCollections.emptyList(); } List >result=newArrayList<>(); intlistCount=(source.size()-1)/limit+1; intremaider=source.size()%listCount;//(先计算出余数) intnumber=source.size()/listCount;//然后是商 intoffset=0;//偏移量 for(inti=0;i
value; 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); } returnresult; } publicstaticvoidmain(String[]args){ Listlist=newArrayList(); for(inti=0;i<65;i++){ list.add(i); } List result=averageAssign(list,15); result.forEach(l->{ l.forEach(i-> System.out.print(i+"\t") ); System.out.println(); }); System.out.println("===================================================="); result=averageAssign(list,20); result.forEach(l->{ l.forEach(i-> System.out.print(i+"\t") ); System.out.println(); }); System.out.println("===================================================="); //Guava实现不平均分组 result=Lists.partition(list,100); result.forEach(l->{ l.forEach(i-> System.out.print(i+"\t") ); System.out.println(); }); } }
3.展示一下测试结果:
补充知识:Java8Lambda分割List
我就废话不多说了,大家还是直接看代码吧~
/** *@authorcaishen *@version1.0 *@classNameCollectionUtils *@date2019/5/2311:54 *自分で書いたコードの各行を担当する *@dis切割list工具类 **/ publicclassCollectionUtils{ publicstaticList >divide(List
origin,intsize){ if(Assert.isEmpty(origin)){ returnCollections.emptyList(); } intblock=(origin.size()+size-1)/size; returnIntStream.range(0,block). boxed().map(i->{ intstart=i*size; intend=Math.min(start+size,origin.size()); returnorigin.subList(start,end); }).collect(Collectors.toList()); } publicstaticvoidmain(String[]args){ System.out.println(divide(Arrays.asList(1,2,3,4,5,6,7,8,9,10),3)); } }
以上这篇Java实现将List平均分成若干个集合就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。