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

如何在java中检测Arraylist中的重复项,并将同一列表中的另一个变量附加到这些重复项中,java,arraylist,duplicates,Java,Arraylist,Duplicates,我有一个ArrayList,其中包含诸如FirstName、LastName、Employee ID、Employee Job等字段,当用于显示列表时,如果员工的名字和姓氏完全相同,则其姓名(first+Last name)应随附员工ID和职务,并用连字符分隔 我能够使用哈希集和Set的Add操作检测重复项。但在附加ID时,仅对其中一个副本执行此操作 我应该能够根据附加的ID和职务区分同名员工 谢谢:-) 这是我的密码: List<AgentInfoVO>agentQueuesInf

我有一个ArrayList,其中包含诸如FirstName、LastName、Employee ID、Employee Job等字段,当用于显示列表时,如果员工的名字和姓氏完全相同,则其姓名(first+Last name)应随附员工ID和职务,并用连字符分隔

我能够使用哈希集和Set的Add操作检测重复项。但在附加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);
    }
 }
listagentqueensinfo=newarraylist();
ListagentQueues=null;
SetuniqueSet=null;
StringBuffer lastName=null;
if(agentquesinfo!=null){
agentQueues=newarraylist();
uniqueSet=newhashset();
forEach(AgentInfoVO AgentInfoVO:agentquesinfo){
AgentInfo AgentInfo=新的AgentInfo();
agentInfo.setFirstName(agentInfoVO.getFirstName());
agentInfo.setLastName(agentInfoVO.getLastName());
//检查是否存在重复的名称,并将ID和作业附加到重复项
如果(!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);
}
}

对不起,我身边没有电脑,所以我不能给你代码,但可以分享我的想法

使用set add方法检测重复项只会将第二个条目视为重复项,这就是为什么您会错过第一个条目

如果您能够修改AgentInfoVO,则firstName和LastName应该唯一标识AgentInfoVO。 更好的方法是使用这两个字段覆盖hash和equals方法。 并使用此方法检测多个事件并执行附加操作。 ,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 
     }
}
Set duplicateAgentInfoVOs=new HashSet();
对于(AgentInfoVO AgentInfoVO:agentquesinfo){
if(集合频率(agentquesinfo、agentInfoVO)>1){
重复agentinfovos.add(agentInfoVO);
}
}
对于(AgentInfoVO AgentInfoVO:agentquesinfo){
如果(重复AgentInFovos.contains(agentInfoVO)){
//您可以在agentInfoVO中添加附件
}
}

您在代码方面的努力在哪里?在问题中添加您的代码。您有一个包含这些字段的Employee对象的ArrayList-firstName、lastName和others。。是这样吗?请加上代码,你已经尝试到现在