2015-07-22 124 views
0

我有两个对象列表。我通过查询数据库来构造这个列表。比较Java中的两个对象列表以删除重复对象

对于防爆:

List<Employee> firstList={holDate,holName,createdby,empId} 
List<Employee> seconList={holDate,holName,createdby,empId} 

现在,我需要比较holDatefirstListholNameholDatesecondListholName。如果holDate,holNamefirstList没有在secondList找到,我需要在单独的列表中添加。

该列表可以以任何顺序。

注意:empId是主键列。

更新 - 我已经试过:

for(Employee emp:firstList) { 
    for(Employee tgtEmp:seconList) { 
     if((emp.getHolDate()!=tgtEmp.getHolDate())&& (emp.getHolName()!=tgtEmp.getHolName())){ 
      printList.add(emp); break; 
     } 
    } 
} 

样品清单值:

firstList = {{2015年8月15日, “独立日”, “E1”, “EMPL” },{2015-01-26,“Republic Day”,“e1”,“Empl”},{2015-09-20,“Memorial Day”,“e1”,“Empl”}}
seconList = {{ 2015-08-15,“独立日”,“e1”,“Emp2”},{2015-10-25,“感谢奉献日”,“e1”,“Emp2”}}

这里newlist具有所有的价值在seconList和“RepublicDay”,“亡兵纪念日”,可从firstList

+1

什么是'Employee'?它是否有自定义的'equals'和'hashcode'方法,因此只需使用'List#removeAll'或'List#retainAll'来标识重复项就很容易了。当然,你可以把他们两个都变成某种'Set' ... – MadProgrammer

+2

你在提问之前做过任何研究吗?看到很多问题,你可以在计算器 –

+0

嗨Renjith得到的,请在下面找到片断
的(员工EMP:firstList){ \t \t \t \t \t \t \t \t的(员工tgtEmp:seconList){ \t \t \t \t \t \t \t \t \t \t如果((emp.getHolDate()!= tgtEmp.getHolDate())&& \t \t \t \t \t \t \t(emp.getHolName()!= tgtEmp.getHolName())){ \t \t \t \t \t \t的printList。添加(EMP); \t \t \t \t \t \t break; \t \t \t \t \t} \t \t \t \t \t \t \t \t \t \t \t \t} \t \t \t \t} – iShower

回答

0

入住这

for (Employee emp : firstList) { 
     boolean found=false; 
     for (Employee tgtEmp : seconList) { 
      if ((emp.getHolDate().equals(tgtEmp.getHolDate())) && (emp.getHolName().equals(tgtEmp.getHolName()))) { 
       found=true; 
       break; 
      } 
     } 
     if(!found){ 
      printList.add(emp); 
     } 
    } 
+0

过程中无法做到这一点的分贝谢谢..这是工作.. – iShower

+0

希望你了解您的代码中的问题。 – vels4j

0

我觉得上面的答案是不一般。想想如果你在Emp对象上添加任何新字段,那么你需要更新equals方法。如果你是开放在接​​受新的解决方案,那么请考虑下面的答案

Assert List in Junit