1

我有一个列表中的类 Choice 的对象。

选择看起来像这样。

public class Choice extends MorphiaModel{   
    public String name;
    public Double price;
}

其中一些是空的,即名称为“”,价格为空。

我想删除这些空值。

我尝试遍历列表并删除它们为空的 Choice 对象,但我得到了 ConcurrentModificationException 然后我这样做了(在实现 equals 和哈希码之后),但它不起作用,空值仍然存在。

注意:option.choices 是 Choice 对象的列表

Choice emptyChoice = new Choice();
    emptyChoice.name = "";
    emptyChoice.price = null;

    option.choices.remove(emptyChoice);
4

2 回答 2

8

发生这种ConcurrentModificationException情况是因为您试图删除Iterator迭代列表之外的元素。

像这样的工作:

Iterator<Choice> iterator = option.choices.iterator(); // or use option.choices.listIterator()

while (iterator.hasNext()) {
    if (emptyChoice.equals(iterator.next())) {
        iterator.remove();
    }
}
于 2012-06-23T11:08:42.927 回答
2

然后我做了这个(在实现了equals和hashcode之后),但它不起作用,空值仍然存在

List.remove()仅删除第一个匹配的元素(索引最低的元素)。要将它们全部删除,您可以将其放入循环中(如果成功则remove()返回布尔值):true

while ( option.choices.remove(emptyElement) );
于 2012-06-23T11:15:13.257 回答