Java 根据列表中的项目数将LinkedList拆分为多个列表
我的源Java 根据列表中的项目数将LinkedList拆分为多个列表,java,linked-list,Java,Linked List,我的源LinkedList有20300项。我需要将此列表分成每2500个项目的子列表,剩余的值(本例中为300)应出现在最终的列表中 请让我知道我如何才能做到这一点 下面的代码工作正常,除了最后300个值,它抛出了错误 private static List<List<String>> split(LinkedList<String> src, int maxSize){ List<List<String>> splittedL
LinkedList
有20300项。我需要将此列表分成每2500个项目的子列表,剩余的值(本例中为300)应出现在最终的列表中
请让我知道我如何才能做到这一点
下面的代码工作正常,除了最后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;
}
私有静态列表拆分(LinkedList src,int maxSize){
List splittedList=新建ArrayList();
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=结束-开始;
itemsRemaining=itemsRemaining-大小正式列表;
开始=开始+大小正式列表;
}
返回拆分列表;
}
创建一个函数,该函数使用原始列表、计数器和空列表(累加器)递归调用自身。在函数中,执行以下操作:
测试原始列表是否为空,如果为空,则返回累加器。否则,测试计数器是否等于300(或任何值),如果是,则将原始列表中的下一个元素添加到累加器中,将原始列表中当前元素的“next”设置为null,并使用相同的下一个元素零和累加器调用函数,返回结果。否则,使用列表中的下一个元素、递增的计数器和累加器调用函数,并返回结果
使用原始列表、零和空列表调用函数。它应该返回结果
因为这显然是一个家庭作业问题,我希望这能在不为你做家庭作业的情况下有所帮助。由于我没有写出来,可能会出现off by one错误或向累加器添加空列表的问题,但是通用算法应该可以工作,您只需要解决它。祝你好运。你在计算结束时犯了一个错误。而不是
int end = itemsRemaining >= maxSize ? (start + maxSize) : itemsRemaining;
应该是
int end = start + (itemsRemaining >= maxSize ? maxSize : itemsRemaining);
或者更确切地说
int end = start + Math.min(maxSize ,itemsRemaining);
请注意,在最后一个元素的版本中,结束设置为剩余项目的数量,而不是原始列表的大小。您尝试了什么?会出现什么错误?获取错误时,start和end的值是多少?@Freiheit error received是线程“main”java.lang.IllegalArgumentException中的异常:java.util.SubList中的fromIndex(6)>toIndex(2)(未知源代码)java.util.AbstractList.SubList(未知源代码)