昨天遇到个批操作,数据库in()内不可超过1000个,故需要分批次处理,现将切分方法记录如下:
/**
* 分隔数组 根据每段数量分段
*
* @param data 被分隔的数组
* @param count 每段数量
*
* @return
*/
public static<T> List<List<T>> subListByCount(List<T> data, int count) {
List<List<T>> result = new ArrayList<>();
int size = data.size();// 数据长度
if (size > 0 && count > 0) {
int segments = size / count;
/**
* 1.整除,分隔为segments 段
* 2.除不尽, 分隔为segments + 1 段
*/
segments = size % count == 0 ? segments : segments + 1;
List<T> cutList = null;// 每段List
for (int i = 0; i < segments; i++) {
if (i == segments - 1) {
cutList = data.subList(count * i, size);
} else {
cutList = data.subList(count * i, count * (i + 1));
}
result.add(cutList);
}
} else {
result.add(data);
}
return result;
}
/**
* 分隔数组 根据段数分段 <多出部分在最后一个数组>
*
* @param data 被分隔的数组
* @param segments 需要分隔的段数
*
* @return
*/
public static<T> List<List<T>> subListBySegment(List<T> data, int segments) {
List<List<T>> result = new ArrayList<>();
int size = data.size();// 数据长度
if (size > 0 && segments > 0) {
int count = size / segments;
List<T> cutList = null;
for (int i = 0; i < segments; i++) {
if (i == segments - 1) {
cutList = data.subList(count * i, size);
} else {
cutList = data.subList(count * i, count * (i + 1));
}
result.add(cutList);
}
} else {
result.add(data);
}
return result;
}