2014-03-18 34 views
0

晚安,我檢查我的情況我已經在數據之後的過程裝入該信息的列表:如何刪除List <ExpAdminBean>中的重複值?

-> ExpAdminBean [codTipoExpediente=1, desTipoExpediente=Exp Coactivo, siNumSecuencia=2, nroDocumento=null] 
-> ExpAdminBean [codTipoExpediente=19, desTipoExpediente=R Sancion, siNumSecuencia=0, nroDocumento=218-056-02742669] 
-> ExpAdminBean [codTipoExpediente=2, desTipoExpediente=Rec, siNumSecuencia=0, nroDocumento=220-041-01169690] 
-> ExpAdminBean [codTipoExpediente=19, desTipoExpediente=R Sancion, siNumSecuencia=0, nroDocumento=218-056-03048986] 
-> ExpAdminBean [codTipoExpediente=2, desTipoExpediente=Rec, siNumSecuencia=0, nroDocumento=220-041-01169690] 
-> ExpAdminBean [codTipoExpediente=23, desTipoExpediente=CIR, siNumSecuencia=0, nroDocumento=218-174-00146216] 
-> ExpAdminBean [codTipoExpediente=2, desTipoExpediente=Rec, siNumSecuencia=0, nroDocumento=220-041-01169690] 

我要做的,以消除重複的記錄,但nroDocumento屬性,該屬性nroDocumento不重複,如有應及時去掉重複的,我想用一個哈希集合,也存在爲null,這複雜一點。

我的代碼的Java:

Map<String, Set<ExpAdminBean>> map = new ConcurrentHashMap<String, Set<ExpAdminBean>>(); 
Set<ExpAdminBean> setExpAdmin = null; 
for(ExpAdminBean exp : listaExpAdminAux) { 
    setExpAdmin = new HashSet<ExpAdminBean>();  
    map.put(exp.getNroDocumento(), setExpAdmin);     
}   

List<String> listExp = new ArrayList<String>(); 
for(String keySist : map.keySet()){     
    listExp.add(keySist); 
} 

我希望你能幫幫我,謝謝。

+1

是否'ExpAdminBean'已經實現了'.equals()'和'.hashCode()'? – fge

+0

這位朋友你好,這是真的,我可以實現和官員,但時完全一樣的記錄將適用,我的情況是nroDocumento屬性不是ExpAdminBean類重複。 – user3203468

+0

呃,你不必在_all_字段上實現它們。我的問題是你是否做到了,或者你不想這樣做,並且正在尋找替代解決方案 - 在這種情況下,番石榴爲您提供瞭解決方案。 – fge

回答

0

沒有重複的集合(如何確定重複是由你)是Set。 該保持任意的順序集合是一個列表(在ArrayList中的默認順序是插入的順序)。請注意,清單維護訂單...但不一定要對其元素進行排序。

無論如何,如果你想保持插入順序,並保持了重複,你可以使用一個LinkedHashSet<>

如果可能的話,您需要重新實現ExpAdminBean類的equals(~)hashCode()函數。我建議你實現它,以便在nroDocumento相等時返回true,並在新的hashCode實現中直接返回nroDocumento的hashCode。

Otherwize如果你不能做到這一點,我建議你使用地圖:

Map<String, ExpAdminBean> map = ~~~~~~ ; 
for(ExpAdminBean exp : listaExpAdminAux) { 
    if(!map.containsKey(exp.getNroDocumento()) 
     map.put(exp.getNroDocumento(), exp);     
} 
//if you need to put the values in a list you can do ... 
ArrayList<ExpAdminBean> theList = new ArrayList<>(map.size()); 
theList.addAll(map.values()); 

就像我說的,如果之前你要保持你的第一個列表中的「插入順序」你應該使用LinkedHashMap<>LinkedHashSet<>

+0

感謝朋友。 – user3203468