2016-03-24 56 views
2

我需要一個對象添加到列表中,只有當給定列表中尚未包含具有類似性質檢查,如果列表中已經包含有類似值的對象 - java的

List<Identifier> listObject; //list 
Identifier i = new Identifier(); //New object to be added 
i.type = "TypeA"; 
i.id = "A"; 
if(!listObject.contains(i)) { // check 
    listObject.add(i); 
} 

我試圖的對象對現有列表進行檢查。如果列表已經有一個對象jj.type = "TypeA"j.id = "A",我不想將其添加到列表中。

你能幫我通過重寫平等或任何解決方案來實現這一點嗎?

+0

怎麼樣'Set'? – Andrew

+0

不幸的是我不能使用一套,這些類已經寫在現有的系統中。會很好如果我可以把現有的標準條件。 –

回答

5

在您的Identifier類中實施equals()hashCode()

如果您不想在添加元素之前執行檢查,則可以將listObjectList更改爲Set。 A Set是一個不包含重複元素的集合。

遵循Eclipse IDE中自動創建實現的例子:

@Override 
public int hashCode() { 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + ((id == null) ? 0 : id.hashCode()); 
    result = prime * result + ((type == null) ? 0 : type.hashCode()); 
    return result; 
} 

@Override 
public boolean equals(Object obj) { 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    Identifier other = (Identifier) obj; 
    if (id == null) { 
     if (other.id != null) 
      return false; 
    } else if (!id.equals(other.id)) 
     return false; 
    if (type == null) { 
     if (other.type != null) 
      return false; 
    } else if (!type.equals(other.type)) 
     return false; 
    return true; 
} 
+2

並使用你的IDE來生成'equals'和'hashCode',不需要編寫它+1 –

+0

這不會導致一些錯誤,因爲'Identifier'是可變對象嗎? – flakes

+0

是的,你可以在添加元素之前使用List並執行檢查。 – hbelmiro

相關問題