我有一个对象集合:
Collection<MyRecord> myRecords
如何将此集合拆分为两个大小相等的不同集合?
编辑:
我想根据记录数拆分集合,即,如果有 400 条记录,则应拆分为 2 个不同的集合,每个集合大小为 200。
这是一个列表。
- 不,顺序并不重要。
最佳答案
既然你说它是一个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;
请注意,子列表实际上是底层完整列表的 View 。如果您想断开连接(以减少内存占用或防止修改),您可以通过将它们分别复制到新列表来实现:
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());
}
关于Java:如何将特定对象的集合分成两个相等的部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48573722/