我有一个包含FirstName,LastName,Employee ID,Employee Job等字段的ArrayList,当用于显示列表时,如果一个员工拥有相同的名字和姓氏,他的名字(第一个+姓氏)应附加员工ID和由连字符分隔的作业。
我可以使用Hash Set使用Set的Add Operation来检测重复项。但是在附加ID时,它只针对其中一个重复项进行。
我应该能够根据附加的ID和工作来区分具有相同名称的员工。
谢谢: - )
这是我的代码:
List<AgentInfoVO>agentQueuesInfo = new ArrayList<AgentInfoVO>();
List<AgentInfo>agentQueues = null;
Set<AgentInfo>uniqueSet = null;
StringBuffer lastName = null;
if(agentQueuesInfo != null){
agentQueues = new ArrayList<AgentInfo>();
uniqueSet = new HashSet<AgentInfo>();
forEach(AgentInfoVO agentInfoVO : agentQueuesInfo){
AgentInfo agentInfo = new AgentInfo();
agentInfo.setFirstName(agentInfoVO.getFirstName());
agentInfo.setLastName(agentInfoVO.getLastName());
// to check if duplicate names exist and append ID and Job to duplicates
if(!uniqueSet.add(agentInfo)){
lastName = agentInfoVO.getLastName();
if(agentInfoVO.getAgentEmpID() != null){
lastName = lastName.append("-" +agentInfoVO.getAgentEmpID());
}
if(agentInfoVO.etEmpJob() != null){
lastName = lastName.append("-" +agentInfoVO.etEmpJob());
}
agentInfo.setLastName(lastName.toString());
}
agentInfo.setAgentEmpID(agentInfoVO.getAgentEmpID());
agentInfo.setEmpJob(agentInfoVO.etEmpJob());
agentQueues.add(agentInfo);
}
}
答案 0 :(得分:0)
抱歉,我没有电脑靠近我,所以我不能给你代码,但可以分享我的想法。
使用set add方法检测重复项只会看到第二个条目重复,这就是为什么你会错过第一个条目。
如果您能够修改AgentInfoVO,则firstName和LastName应唯一标识AgentInfoVO。 更好的方法是使用两个字段覆盖hash和equals方法。 并使用此方法检测多个事件并执行附加操作。 https://docs.oracle.com/javase/6/docs/api/java/util/Collections.html#frequency(java.util.Collection,java.lang.Object)。
类似的东西:
Set<AgentInfoVO> duplicateAgentInfoVOs = new HashSet<AgentInfoVO>();
for(AgentInfoVO agentInfoVO : agentQueuesInfo) {
if(Collections.frequency(agentQueuesInfo, agentInfoVO) > 1) {
duplicateAgentInfoVOs.add(agentInfoVO);
}
}
for(AgentInfoVO agentInfoVO : agentQueuesInfo) {
if(duplicateAgentInfoVOs.contains(agentInfoVO)) {
//you can do your appends to agentInfoVO
}
}