import java.util.*;
/**
* 数组拆分工具类
*/
public class SplitListUtils<T> {
/**
* 待分割数组
*/
private List<T> dataList;
/**
* 分成几组
*/
private int n;
/**
* 数组大小
*/
private int len;
public SplitListUtils(List<T> dataList, int n) {
this.dataList = dataList;
this.n = n;
// dataList不为null且不为空
this.len = (!Objects.isNull(dataList) && dataList.size() > 0) ? dataList.size() : 0;
}
/**
* list校验避免出现算数异常
*/
public void check() {
if (Objects.isNull(dataList)) {
throw new RuntimeException("dataList为null");
}
if (dataList.size() == 0) {
throw new RuntimeException("dataList为空");
}
}
/**
* 将list平均分成n组,多出来的部分进行分摊
*
* @return
*/
public List<List<T>> split() {
check();
int number = len / n;
int remainder = len % n;
List<List<T>> result = new ArrayList<>();
int offset = 0;
for (int i = 0; i < n; ++i) {
if (remainder > 0) {
result.add(this.dataList.subList(i * number + offset, (i + 1) * number + 1 + offset));
remainder--;
offset++;
} else {
result.add(this.dataList.subList(i * number + offset, (i + 1) * number + offset));
}
}
return result;
}
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
for (int i = 1; i <= 15; ++i) {
list.add(i);
}
System.out.println(new SplitListUtils(list, 4).split());
}
}
数组分割工具类,方便多线程任务处理。
于 2024-01-27 00:31:46 首次发布