Java:如何将特定对象的集合分成两个相等的部分?

标签 java collections

我有一个对象集合:

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/

相关文章:

c# - .NET 通用集?

java - SSL 证书验证在 Java 中失败 - 但在其他任何地方都有效

java - 移动后端启动器 - 上传到 AppEngine Blobstore

java - HashSet的retainAll使用接口(interface)

java - 通用编程 : error when trying to put values in an EnumMap

java - 集合映射与 TreeSet 映射——什么是正确的语法?

Java Swing - JPanel 居中问题

JavaFX:设置场景最小尺寸,不包括装饰

java - scxml 中引发事件的问题

java - Java中多维数组的归并排序