java - 用于过滤的 For-Each 循环的替代品是什么?

标签 java list foreach

虽然 for-each 循环有很多优点,但问题是,当你想过滤(过滤意味着从列表中删除元素)一个列表时,它不起作用,你能请任何替换,因为即使遍历索引也不是不错的选择..

最佳答案

“过滤”是什么意思?从列表中删除某些元素?如果是这样,您可以使用 iterator :

for(Iterator<MyElement> it = list.iterator(); it.hasNext(); ) {
    MyElement element = it.next();
    if (some condition) {
      it.remove();
    }
}

更新(基于评论):

考虑以下示例来说明迭代器的工作原理。假设我们有一个包含“A”和“B”的列表:

A A B B A

我们想删除所有那些讨厌的 B。因此,使用上面的循环,代码将按如下方式工作:

  1. 有下一个()?是的。下一个()。 element 指向 1st A.
  2. 有下一个()?是的。下一个()。 element 指向 2nd A.
  3. 有下一个()?是的。下一个()。 element 指向 1st B.remove()。迭代器计数器不会改变,它仍然指向 B 所在的位置(从技术上讲,这并不完全正确,但从逻辑上讲,它就是这样工作的)。如果您现在再次调用 remove(),则会出现异常(因为列表元素不再存在)。
  4. 有下一个()?是的。下一个()。 element指向2nd B,其余同#3
  5. 有下一个()?是的。下一个()。 element 指向 3rd A.
  6. 有下一个()?不,我们完成了。列表现在有 3 个元素。

更新 #2:remove() 操作在迭代器上确实是可选的 - 但只是因为它在基础集合上是可选的。这里的底线是——如果您的集合支持它(Java 集合框架中的所有集合都支持),那么迭代器也支持。如果您的 Collection 不支持它,那么您无论如何都不走运。

关于java - 用于过滤的 For-Each 循环的替代品是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1504790/

相关文章:

python - 删除列表中的多个词典

java - 提交分数排行榜 Google Play 时应用程序崩溃

java - 双重检查锁定,NetBeans 让我感到困惑?

java - JBoss AS 5 中的事务文件访问和缓存

python - 在 Python 中向列表的一部分添加偏移量?

java - 迭代Java时从数组中删除对象

java - 有多少不必要的 java ArrayList 对象会影响应用程序或内存?

r - 在 mutate 中访问列表元素

ruby - 懒惰地遍历数组

javascript - 将数组中的两个对象与变量进行比较以显示第三个对象