我有一个对象集合:
Collection<MyRecord> myRecords
如何将此Collection分成两个大小相等的不同集合?
编辑:
我想根据记录的数量拆分集合,即如果它有400条记录,它应该分成2个不同的200个大小的集合。
这是一个清单。
答案 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());
}