[英]Java loop strange behaviour
我有一个拆分方法,里面有一个循环。 此循环运行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时,您的循环条件是这样的:
(i + maxBatchSize) <= bigCollection.size()
6 + 2 <= 8
因此,您要进行操作。但是第五次迭代不再遵守此条件,因为它是这样的:
(i + maxBatchSize) <= bigCollection.size()
8 + 2 <= 8
别忘了,您的情况不仅在i
而且在i + maxBatchSize
以下为循环
for (int i = 0; (i + maxBatchSize) <= bigCollection.size(); i = i + maxBatchSize) {
result.add(bigCollection.subList(i, i + maxBatchSize));
}
从0到bigCollection.size() - maxBatchSize
的步长为maxBatchSize
。 在您的示例中, bigCollection
大小为8, maxBatchSize
为2,因此循环从0到6的步长为2。总共执行4个步骤: maxBatchSize
和6。
以下如果
if (bigCollection.size() % maxBatchSize > 0)
因为8 % 2 = 0
(所以不执行subList
),所以不执行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.