我的来源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;
}
答案 0 :(得分:0)
创建一个以原始列表,计数器和空列表(累加器)递归调用自身的函数。在该功能中,执行以下操作:
测试原始列表是否为空,如果是,则返回累加器。否则,测试计数器是否等于300(或其他),如果是,则将原始列表中的下一个元素添加到累加器,将原始列表中当前元素的“next”设置为null,并调用该函数使用相同的下一个元素,零和累加器,返回结果。否则,使用列表中的下一个元素,递增计数器和累加器调用函数,返回结果..
使用原始列表,零和空列表调用该函数。它应该返回结果。
由于这显然是一个家庭作业问题,我希望这有助于您不做功课。由于我没有写出来,可能会出现逐个错误或向累加器添加空列表的问题,但是通用算法应该可以工作,你只需要解决它。祝你好运。
答案 1 :(得分:0)
计算结束时你犯了一个错误。而不是
int end = itemsRemaining >= maxSize ? (start + maxSize) : itemsRemaining;
应该是
int end = start + (itemsRemaining >= maxSize ? maxSize : itemsRemaining);
或者更确切地说
int end = start + Math.min(maxSize ,itemsRemaining);
请注意,在您的版本中,最后一个元素的结尾设置为剩余项目的数量,而不是原始列表的大小。