Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 根据列表中的项目数将LinkedList拆分为多个列表_Java_Linked List - Fatal编程技术网

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(未知源代码)