2012-06-23 82 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