如何删除List <expadminbean>?</expadminbean>中的重复值

时间:2014-03-18 23:50:48

标签: java arraylist hashset

我查看我的情况我有一个列表,其中数据加载后的过程包含此信息:

-> 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 个答案:

答案 0 :(得分:0)

没有重复的集合(如何确定由您决定的重复项)是Set维护任意顺序的集合是List(在ArrayList中,默认顺序是插入顺序)。请注意,列表维护订单...但不一定对其元素进行排序。

无论如何,如果你想保留插入顺序并保留重复,你可以使用LinkedHashSet<>

在您的情况下,如果可能,您需要重新实现ExpAdminBean类的equals(~)hashCode()函数。我建议你实现它,以便当nroDocumento相等时,equals返回true,并在新的hashCode实现中直接返回nroDocumento的hashCode。

如果你不能这样做,我建议你使用地图:

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