【发布时间】:2015-08-17 08:08:53
【问题描述】:
我有这个拆分方法,里面有一个循环。这个循环运行了 4 次,但它应该运行 5 次。知道为什么会这样吗?
public static <T> List<List<T>> split(List<T> bigCollection, int maxBatchSize) {
List<List<T>> result = new ArrayList<List<T>>();
if (CollectionUtils.isEmpty(bigCollection)) {
// return empty list
} else if (bigCollection.size() < maxBatchSize) {
result.add(bigCollection);
} else {
for (int i = 0; (i + maxBatchSize) <= bigCollection.size(); i = i + maxBatchSize) {
result.add(bigCollection.subList(i, i + maxBatchSize));
}
if (bigCollection.size() % maxBatchSize > 0) {
result.add(bigCollection.subList((int) (bigCollection.size() / maxBatchSize) * maxBatchSize,
bigCollection.size()));
}
}
return result;
}
public static void main(String[] args) {
List<String> coll = new ArrayList<String>();
coll.add("1");
coll.add("2");
coll.add("3");
coll.add("4");
coll.add("5");
coll.add("6");
coll.add("7");
coll.add("8");
System.out.println(split(coll, 2));
}
输出 - [[1, 2], [3, 4], [5, 6], [7, 8]]
据我说,当循环第五次运行并尝试执行子列表功能时,这段代码应该会中断。
【问题讨论】:
-
老兄,只有 4 个步骤(你说是 5 个)!为什么不在调试器中运行呢?
-
您的声明
(i + maxBatchSize) <= bigCollection.size()检查 i 是否为 2、4、6、8,并在第五次运行中检查 10 和 8,然后停止。怎么了? -
如果您无法轻松查看循环代码并查看它运行了多少次,这意味着您的代码过于复杂,请尝试创建一些具有良好名称的中间变量以使其更易于理解。
-
对不起,伙计们......我的错......抱歉浪费你的时间......