如何从列表中删除空对象(而不是值)

时间:2012-06-23 11:04:47

标签: java

我有列表中选择类的对象。

选择看起来像这样。

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);

2 个答案:

答案 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) );