Java实现集合等分多个集合
想等分切割集合成多个集合,不想写,想抄,奈何网上写的都不正确,说的是等分成多个集合
不是一个集合按照指定长度进行分割,顺手写一个记录下
public static <T> List<List<T>> groupList(List<T> list, int num) {
if (num > list.size()) {
num = list.size();
}
int toIndex = list.size() / num;
List<List<T>> listGroup = new ArrayList<>();
int listSize = list.size();
//子集合的长度
for (int i = 0; i < list.size(); i += toIndex) {
if (i + toIndex > listSize) {
toIndex = listSize - i;
}
List<T> newList = new ArrayList<>();
newList.addAll(list.subList(i, i + toIndex));
listGroup.add(newList);
}
List<List<T>> lists2 = new ArrayList<>();
if (listGroup.size() > num) {
List<T> moreValue = new ArrayList();
int i = 1;
for (List<T> stringList : listGroup) {
//多出来的值
if (i > num) {
moreValue.addAll(stringList);
} else {
//等分前,现将前面的添加起来
lists2.add(stringList);
}
i++;
}
int j = 0;
//多出来的值,再重新一个个的分到前面去
for (T s : moreValue) {
lists2.get(j).add(s);
j++;
}
} else {
lists2.addAll(listGroup);
}
return lists2;
}
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("1");
list.add("2");
list.add("3");
list.add("4");
list.add("5");
list.add("6");
list.add("7");
List<List<String>> lists = groupList(list, 2);
System.out.println(lists);
}
结果:即将一个集合分成2个集合,如果是单数的,剩下一个往第一个里塞
分成3个的也一样的道理,剩下多的一个按照顺序从第一个集合往后面加,尽量等分,误差不过1