Java 将List平均分成若干个集合
程序员文章站
2022-07-14 13:02:33
...
1.初衷是由于调用银行接口的批量处理接口时,每次最多只能处理500条数据,但是当数据总数为510条时。我又不想第一次调用处理500条,第二次调用处理10条数据,我想要的是每次处理255条数据。下面展示的是我的处理方法
2.写了一个简单的ListUtils:
package com.example.springboottest.common.util;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
/**
* List 工具类
* @author Neo
* @date 2018年4月16日13:13:37
*/
public class ListUtils {
/**
* 将一个List均分成n个list,主要通过偏移量来实现的
*
* @param source 源集合
* @param limit 最大值
* @return
*/
public static <T> List<List<T>> averageAssign(List<T> source, int limit) {
if (null == source || source.isEmpty()) {
return Collections.emptyList();
}
List<List<T>> result = new ArrayList<>();
int listCount = (source.size() - 1) / limit + 1;
int remaider = source.size() % listCount; // (先计算出余数)
int number = source.size() / listCount; // 然后是商
int offset = 0;// 偏移量
for (int i = 0; i < listCount; i++) {
List<T> 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);
}
return result;
}
public static void main(String[] args) {
List list = new ArrayList();
for (int i = 0; i < 65; i++) {
list.add(i);
}
List<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();
});
}
}
3.展示一下测试结果:
上一篇: mybatis 的一些用法
推荐阅读