Java:如何将特定对象的集合拆分为2个相等的部分?

时间:2018-02-01 23:59:15

标签: java collections

我有一个对象集合:

Collection<MyRecord> myRecords

如何将此Collection分成两个大小相等的不同集合?

编辑:

  • 我想根据记录的数量拆分集合,即如果它有400条记录,它应该分成2个不同的200个大小的集合。

  • 这是一个清单。

  • 不,订单无关紧要。

1 个答案:

答案 0 :(得分:1)

由于您说它是List,因此您可以使用subList()将其拆分:

int midpoint = myRecords.size() / 2;
List<MyRecord> asList = (List<MyRecord>)myRecords;
List<MyRecord> part1 = asList.subList(0, midpoint);
List<MyRecord> part2 = asList.subList(midpoint, asList.size());
如果有奇数项目,

part1将是较小的一个。要使part2更小,请将第一行更改为:

int midpoint = (myRecords.size() + 1) / 2;

请注意,子列表实际上是基础完整列表的视图。如果要断开连接(以减少内存占用或防止修改),可以将它们分别复制到新列表中来执行此操作:

List<MyRecord> part1 = new ArrayList<>(asList.subList(0, midpoint));
List<MyRecord> part2 = new ArrayList<>(asList.subList(midpoint, asList.size()));

如果您想要一个适用于任何Collection类型的解决方案,您需要使用其Iterator

List<MyRecord> part1 = new ArrayList<>();
List<MyRecord> part2 = new ArrayList<>();
Iterator<MyRecord> iter = myRecords.iterator();
for (int i = 0; iter.hasNext(); i++) {
    (i < midpoint ? part1 : part2).add(iter.next());
}