如何在java中检测Arraylist中的重复项,并将同一列表中的另一个变量附加到这些重复项

时间:2015-04-11 15:51:20

标签: java arraylist duplicates

我有一个包含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);
    }
 }

1 个答案:

答案 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 
     }
}