java - 如何从 Java 中的集合中弹出项目?

标签 java collections

JDK 或 apache commons 中是否有一种方法可以从 java.util.List 中“弹出”元素列表?我的意思是,删除元素列表并返回它,就像这个方法:

public Collection pop(Collection elementsToPop, Collection elements) {

  Collection popped = new ArrayList();

  for (Object object : elementsToPop) {
    if (elements.contains(object)) {
      elements.remove(object);
      popped.add(object);
    }
  }

  return popped;
}

最佳答案

如果您正在寻找类似堆栈的结构,我建议您接受 Deque (LinkedList 是最常见的实现)而不是 Collection .

如果您实际上不需要将其视为堆栈,只需从 Collection 中获取一个迭代器即可并使用 remove()方法:

for (Iterator<SomeType> it = elements.iterator(); it.hasNext(); ) {
    SomeType e = it.next();
    it.remove();
    popped.add(e);
}

请注意,移除是一个可选操作,某些实现可能会抛出 UnsupportedOperationException。 (例如,Collections.unmodifiable...() 中的集合返回的迭代器将)。

编辑:仔细查看您的问题后,我认为您只需要这个:

elements.removeAll(elementsToRemove);

如果您的主要观点是您需要确切地知道哪些 元素实际被弹出,我认为您坚持使用原始代码。

关于java - 如何从 Java 中的集合中弹出项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2998848/

相关文章:

java - GridBagLayout 未填充所有空间

java - 配置hibernate和PostgreSQL的问题

java - MDX 查询返回不同的结果

java - 当 List 实现的对象将其自己的对象存储为列表中的元素时,为什么 hashCode 和 equals 方法不起作用

.net - .NET 中的非通用集合是否已过时?

Python LINQ 类方法

java - List<E> 不喜欢我的自定义类

Java CDI 拦截器无法使用 WELD 运行 Web 应用程序

scala - 检查集合中包含的所有元组中的给定元素是否相等

c# - 在 C# 中使用 Linq 进行线性化