/**
* 分隔数组 根据段数分段 <多出部分在最后一个数组>
*
* @param data 被分隔的数组
* @param segments 需要分隔的段数
* @return
*/
public List<List<T>> subListBySegment(List<T> data, int segments) {
List<List<T>> result = new ArrayList<>();
int size = data.size();// 数据长度
if (size > 0 && segments > 0) {// segments == 0 ,不需要分隔
int count = size / segments;// 每段数量
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 count 每段数量
* @return
*/
public 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;
}
上面就是根据段数和每段数量分组的方法了。
如需使用, 复制即可, 需要类上使用<T>