我的来源LinkedList
有20300个项目。我需要将此列表分别分为每2500个项目的子列表,其余的值(在这种情况下为300)应该出现在最终的List
中。
请让我知道我该如何实现?
下面的代码工作正常,除了最后300个值,它抛出错误。
private static List<List<String>> split(LinkedList<String> src, int maxSize){
List<List<String>> splittedList = new ArrayList<List<String>>();
int itemsRemaining = src.size();
int start = 0;
while (itemsRemaining != 0) {
int end = itemsRemaining >= maxSize ? (start + maxSize) : itemsRemaining;
splittedList.add(src.subList(start, end));
int sizeOfFinalList = end - start;
itemsRemaining = itemsRemaining - sizeOfFinalList;
start = start + sizeOfFinalList;
}
return splittedList;
}
最佳答案
计算结束时您犯了一个错误。而不是
int end = itemsRemaining >= maxSize ? (start + maxSize) : itemsRemaining;
它应该是
int end = start + (itemsRemaining >= maxSize ? maxSize : itemsRemaining);
更确切地说
int end = start + Math.min(maxSize ,itemsRemaining);
请注意,在您的版本中,最后一个元素的结尾设置为剩余项目数,而不是原始列表的大小。