我必须将字符串列表分成 block ,因此我写了这个方法,
public static List<List<String>> chunkIds(List<String> ids,
int max) {
List<List<String>> chunks = new ArrayList<>();
for (int i = 0; i < ids.size(); i = i + max) {
List<String> chunk = ids.subList(i, i + max);
chunks.add(chunk);
}
return chunks;
}
当我调用方法时 我在获取 subList 时遇到 IndexOutOfBoundsException 。其中 max 是 block 大小。有人可以帮助我理解这里的索引逻辑错误吗。
最佳答案
如果您使用 i + max
作为 subList
的第二个参数, 如果 ids.size()
不能被 max
整除, 该索引将大于 ids.size()
.
使用
Math.min(i + max, ids.size())
而不是 i + max
.
或者,避免计算 min
每次:
int i;
for (i = 0; i + max < ids.size(); i += max) {
chunks.add(ids.subList(i, i + max));
}
if (i < ids.size()) {
chunks.add(ids.subList(i, ids.size());
}
关于java - Java 中关于获取子字符串的 IndexOutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43652484/