gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 21:28:07 25 4
gpt4 key购买 nike

虽然 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com