将列表划分为 n 大小列表的有效方法

新手上路,请多包涵

我有一个 ArrayList ,我想将其分成更小的 List n 大小的对象,并对每个对象执行操作。我当前执行此操作的方法是使用 ArrayList Java 对象实现的。任何伪代码都可以。

     for (int i = 1; i <= Math.floor((A.size() / n)); i++) {
            ArrayList temp = subArray(A, ((i * n) - n),
                    (i * n) - 1);
            // do stuff with temp
        }

    private ArrayList<Comparable> subArray(ArrayList A, int start,
                int end) {
            ArrayList toReturn = new ArrayList();
            for (int i = start; i <= end; i++) {
                toReturn.add(A.get(i));
            }
            return toReturn;
        }

其中 A 是列表, n 是所需列表的大小

我相信这种方式在处理规模高达 100 万的相当大的列表时会花费太多时间,所以我试图找出更有效的方法。

原文由 Rowhawn 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 542
2 个回答

你会想要做一些利用 List.subList(int, int) 视图的事情,而不是复制每个子列表。要真正轻松地做到这一点,请使用 GuavaLists.partition(List, int) 方法:

 List<Foo> foos = ...
for (List<Foo> partition : Lists.partition(foos, n)) {
  // do something with partition
}

请注意,与许多事情一样,这对于 List 不是非常有效 RandomAccess (例如 LinkedList )。

原文由 ColinD 发布,翻译遵循 CC BY-SA 4.0 许可协议

例如:

     int partitionSize = 10;
    List<List<String>> partitions = new ArrayList<>();

    for (int i=0; i<yourlist.size(); i += partitionSize) {
        partitions.add(yourlist.subList(i, Math.min(i + partitionSize, yourlist.size())));
    }

    for (List<String> list : partitions) {
        //Do your stuff on each sub list
    }

原文由 BrownRecluse 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题