2012-06-23 46 views
1

我有一个类的对象选择列表中。如何从列表中删除空对象(不是值)

选择看起来像这样。

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

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

我想删除这些空值。我试着迭代列表并删除它们为空的Choice对象,但是我得到了一个ConcurrentModificationException,然后我执行了这个操作(在实现equals和hashcode之后),但它不起作用,空值仍然存在。

注:option.choices是选择对象的列表

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

    option.choices.remove(emptyChoice); 

回答

8

ConcurrentModificationException发生,因为你试图删除Iterator遍历列表之外的元素。

事情是这样工作的:

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

while (iterator.hasNext()) { 
    if (emptyChoice.equals(iterator.next())) { 
     iterator.remove(); 
    } 
} 
+0

三江源非常多,这是优雅的和有效的。我会尽快选择正确的。 – Ankur

+0

我刚刚在if语句的末尾添加了a) – Ankur

+0

没问题,谢谢修复语法。 – fivedigit

2

那么我这样做(实施equals和hashCode之后),但它不工作,空值仍然存在

List.remove()只删除匹配的第一个元素(索引最低的元素)。要删除所有这些,你可以把它放在一个循环(remove()返回布尔true如果成功):

while (option.choices.remove(emptyElement)); 
+0

谢谢,完美无缺! – Ankur