作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
虽然 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
。因此,使用上面的循环,代码将按如下方式工作:
element
指向 1st A.element
指向 2nd A.element
指向 1st B.remove()。迭代器计数器不会改变,它仍然指向 B 所在的位置(从技术上讲,这并不完全正确,但从逻辑上讲,它就是这样工作的)。如果您现在再次调用 remove(),则会出现异常(因为列表元素不再存在)。element
指向2nd B,其余同#3element
指向 3rd A.更新 #2:remove()
操作在迭代器上确实是可选的 - 但只是因为它在基础集合上是可选的。这里的底线是——如果您的集合支持它(Java 集合框架中的所有集合都支持),那么迭代器也支持。如果您的 Collection 不支持它,那么您无论如何都不走运。
关于java - 用于过滤的 For-Each 循环的替代品是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1504790/
我是一名优秀的程序员,十分优秀!