我有列表中选择类的对象。
选择看起来像这样。
public class Choice extends MorphiaModel{
public String name;
public Double price;
}
其中一些是空的,名称为“”,价格为空。
我想删除这些空值。
我尝试迭代列表并删除它们空的Choice对象,但是我得到了一个ConcurrentModificationException然后我做了这个(在实现equals和hashcode之后),但它不起作用,空值仍然存在。
注意:option.choices是Choice对象的列表
Choice emptyChoice = new Choice();
emptyChoice.name = "";
emptyChoice.price = null;
option.choices.remove(emptyChoice);
答案 0 :(得分:8)
ConcurrentModificationException
发生了,因为您试图删除Iterator
遍历列表的元素之外的元素。
这样的工作:
Iterator<Choice> iterator = option.choices.iterator(); // or use option.choices.listIterator()
while (iterator.hasNext()) {
if (emptyChoice.equals(iterator.next())) {
iterator.remove();
}
}
答案 1 :(得分:2)
然后我做了这个(在实现equals和hashcode之后),但它不起作用,空值仍然存在
List.remove()
仅删除匹配的第一个元素(索引最低的元素)。要删除它们,可以将它放在一个循环中(remove()
如果成功则返回布尔值true
):
while ( option.choices.remove(emptyElement) );