根据列表中的项目数将LinkedList拆分为多个列表

时间:2013-11-26 16:45:45

标签: java linked-list

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

}

2 个答案:

答案 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);

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