HashSet 去重复对象问题

项目中碰到一个略奇葩的需求:

不同的人看到的列表数据不一样;本来正常情况下这就是一个权限问题,按照正常权限控制就可以;但是用户的要求不仅仅是这样:对 A,B,C这三个角色按照表中的某一个类型字段控制;对D这三个角色按照权限控制;

实际业务是这样: 大约有4个角色可以对工作进行验收,A(需求管理岗),B(设计管理岗),C(测试管理)分别可以验收 交付类型为
需求,设计,测试的工作;
而D就不一样了 D(项目经理)可以对 交付类型为(开发,维护,设计)并且表单中的项目必须属于他自己的名下的项目;
如果有一个人的角色既是 A 也是D ,那么他就能看到交付类型为需求的工作,以及他部门下面 交付类型为 (开发,维护,设计)的工作

这一个SQL实在是不好弄,当时就想了下 通过2个SQL来搞定 :
先获取当前人所具有的权限:
然后分别去查询2个SQL
其中一个SQL通过交付类型去判断 很简单
另外一个角色去关联我们系统中的权限表 这样就能得到2个LIST
然后一汇总 就形成了用户想要的列表:
那么问题就出现了 ------- 如果一个人既拥有A角色 又拥有D角色,通过SQL就查到了2个LIST集合中就会出现重复对象;说到这里才说到重点,上面的话其实 就是自己留个学习的东西

重点
定义了一个hashSet; 但是获取到的list中去重也只是对同一个对象去重;
我通过2个sql查到的实体对象 肯定不是一个对象了;所以没法去重;

这里就需要重写实体对象的 hashCode方法和equal方法了:
public class AuxTaskInfoHashSetEntity extends AuxTaskInfoEntity {
private static final long serialVersionUID = 1L;
private Long taskId;
@Override
public int hashCode() {
// TODO Auto-generated method stub
//return name.hashCode();
return taskId.intValue();//如果没有对象的唯一值,可使用 return name.hashCode()
}
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
} else if (obj instanceof AuxTaskInfoHashSetEntity) {
AuxTaskInfoHashSetEntity customString = (AuxTaskInfoHashSetEntity) obj;
return customString.taskId.equals(taskId);
} else {
return false;
}
}
public Long getTaskId() {
return taskId;
}
public void setTaskId(Long taskId) {
this.taskId = taskId;
}

}

这样只要是取到的list中 对象AuxTaskInfoHashSetEntity 的taskId一样,那么hashSet就会认为他们是同一个对象,过滤掉!

你可能感兴趣的:(记录)