我有一个大于 20k 的随机大小列表。如何将它们拆分为子列表,其中每个子列表的长度相等或长度相等 + 1(对于奇数列表?)?
由于它是随机大小,因此实现不应该有任何定义的大小,对吧?
我目前正在查看此模板:
public static <T> List<List<T>> split(List<T> list, int size) throws NullPointerException, IllegalArgumentException {
if (list == null) {
throw new NullPointerException("The list parameter is null.");
}
if (size <= 0) {
throw new IllegalArgumentException("The size parameter must be more than 0.");
}
int num = list.size() / size;
int mod = list.size() % size;
List<List<T>> ret = new ArrayList<List<T>>(mod > 0 ? num + 1 : num);
for (int i = 0; i < num; i++) {
ret.add(list.subList(i * size, (i + 1) * size));
}
if (mod > 0) {
ret.add(list.subList(num * size, list.size()));
}
return ret;
}
这个是根据已知的子列表大小创建子列表,然后创建 X 个子列表。
我需要的结果是传递一个 LIST 和一个目标 sublistSize。所以我传递了一个大小为 26346 记录和 sublistSize 5 的列表。我最终会得到 5 个子列表。前四个子列表将有 5269 条记录,最后(第 5 个)子列表将有 5270 条记录。