【发布时间】:2013-05-17 19:31:18
【问题描述】:
我有一个大于 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 条记录。
【问题讨论】:
-
你想要一定数量的子列表还是每个子列表都有一定的长度?
-
目前我最多需要 5 个列表,然后在每个列表中都有大约相等数量的记录。
-
您提到子列表的长度为
length,有些的长度为length + 1。这些超长列表应该是第一个子列表、最后一个子列表、每隔一个子列表还是其他一些排列?