我的来源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);


请注意,在您的版本中,最后一个元素的结尾设置为剩余项目数,而不是原始列表的大小。

08-06 01:07