1.将一组数据固定分组,每组n个元素:
public staticList > split(List
resList, int subListLength) { if (CollectionUtils.isEmpty(resList) || subListLength <= 0) { return Lists.newArrayList(); } List > ret = Lists.newArrayList(); int size = resList.size(); if (size <= subListLength) { // 数据量不足 subListLength 指定的大小 ret.add(resList); } else { int pre = size / subListLength; int last = size % subListLength; // 前面pre个集合,每个大小都是 subListLength 个元素 for (int i = 0; i < pre; i++) { List
itemList = Lists.newArrayList(); for (int j = 0; j < subListLength; j++) { itemList.add(resList.get(i * subListLength + j)); } ret.add(itemList); } // last的进行处理 if (last > 0) { List itemList = Lists.newArrayList(); for (int i = 0; i < last; i++) { itemList.add(resList.get(pre * subListLength + i)); } ret.add(itemList); } } return ret; }
2.将一组数据平均分成n组:
public staticList > averageAssign(List
source, int n) { List > result = new ArrayList
>(); int remainder = source.size() % n; //(先计算出余数) int number = source.size() / n; //然后是商 int offset = 0;//偏移量 for (int i = 0; i < n; i++) { List
value = null; if (remainder > 0) { value = source.subList(i * number + offset, (i + 1) * number + offset + 1); remainder--; offset++; } else { value = source.subList(i * number + offset, (i + 1) * number + offset); } result.add(value); } return result; }
3.main方法测试:
// 运行代码
public static void main(String[] args) {
List list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
list.add("7");
//将一组数据平均分成n组
List> temps = averageAssign(list, 4);
int j = 0;
for (List obj : temps) {
System.out.println(String.format("row:%s -> size:%s,data:%s", ++j, obj.size(), obj));
}
//将一组数据固定分组,每组n个元素
List> temps2 = split(list, 4);
int k = 0;
System.err.println("====================================================================");
System.err.println("====================================================================");
System.err.println("====================================================================");
for (List obj : temps2) {
System.out.println(String.format("row:%s -> size:%s,data:%s", ++k, obj.size(), obj));
}
}



