我查看我的情况我有一个列表,其中数据加载后的过程包含此信息:
-> 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);
}
答案 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<>
。