2015-07-22 111 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