[英]Removing entries from a list?
假设您拥有一个支持remove函数的ArrayList -删除该条目并将所有内容向右移到左边。
如果要在特定条件下从列表中删除内容,可以执行以下操作:
for (int i = 0; i < list.size(); i++) {
if (condition) {
list.remove(i);
i--;
}
}
但这是丑陋的,让人觉得有点黑。 您可以使用Iterator进行相同的操作,但在使用Iterator时不应更改列表。
那么什么是非丑陋的解决方案?
实际上,迭代器可用于此目的,这是Oracle文档建议的。
这是上面的链接在遍历集合-迭代器下提供的代码:
static void filter(Collection<?> c) {
for (Iterator<?> it = c.iterator(); it.hasNext(); )
if (!cond(it.next()))
it.remove();
}
最重要的是,在该示例之上,他们说:
注意,
Iterator.remove
是在迭代过程中修改集合的唯一安全方法。 如果在进行迭代时以任何其他方式修改了基础集合,则行为未指定。
我只是使用循环,而是减少计数器
for(int i=list.size()-1; i>=0; --i) {
if(condition) {
list.remove(i);
}
}
Guava为Java提供了一些功能上的味道。 您的情况是:
FluentIterable.from(your_iterable).filter(new Predicate<Type_contained_in_your_iterable>() {
@Override
public boolean apply(@Nullable Type_contained_in_your_iterable input) {
return {condition};
}
});
请注意,谓词只会返回满足您条件的可迭代元素。 这样更加清晰。 是不是
尝试这个
Iterator itr = list.iterator();
while(itr.hasNext()) {
if(condition)
itr.remove();
}
希望如此工作能顺利进行..否则会建议另一个
我还有另一个要检查的状况。
int count=0;
Iterator itr = list.iterator();
while(itr.next()) {
count++;
if(condition=count)
itr.remove();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.