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(Listsource,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;ivalue;
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);
}
Listresult=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(Listorigin,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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。