将源List按照指定元素数量拆分为多个List
废话不多说,直接上代码
/**
* 将源List按照指定元素数量拆分为多个List
*
* @param source 源List
* @param splitItemNum 每个List中元素数量
*/
public static <T> List<List<T>> averageAssign( List<T> source, int splitItemNum )
{
List<List<T>> result = new ArrayList<List<T>>();
if ( source != null && source.size() > 0 && splitItemNum > 0 ){
if ( source.size() <= splitItemNum ){
// 源List元素数量小于等于目标分组数量
result.add( source );
}else{
// 计算拆分后list数量
int splitNum = ( source.size() % splitItemNum == 0 ) ? ( source.size() / splitItemNum ) : ( source.size() / splitItemNum + 1 );
List<T> value = null;
for ( int i = 0; i < splitNum; i++ ){
if ( i < splitNum - 1 ){
value = source.subList( i * splitItemNum, ( i + 1 ) * splitItemNum );
}else{
// 最后一组
value = source.subList( i * splitItemNum, source.size() );
}
result.add( value );
}
}
}
return result;
}
测试代码
public static void main( String[] args )
{
List<Integer> source = new ArrayList<Integer>();
for ( int i = 1; i <= 101; i++ ){
source.add( i );
}
List<List<Integer>> result = averageAssign( source, 10 );
for ( List<Integer> re : result ){
System.out.println( JSON.toJSONString( re ) );
}
}
运行结果
[1,2,3,4,5,6,7,8,9,10]
[11,12,13,14,15,16,17,18,19,20]
[21,22,23,24,25,26,27,28,29,30]
[31,32,33,34,35,36,37,38,39,40]
[41,42,43,44,45,46,47,48,49,50]
[51,52,53,54,55,56,57,58,59,60]
[61,62,63,64,65,66,67,68,69,70]
[71,72,73,74,75,76,77,78,79,80]
[81,82,83,84,85,86,87,88,89,90]
[91,92,93,94,95,96,97,98,99,100]
[101]