將ListA和ListB合併為一個List
應用環境:從資料庫中查詢出滿足一系列條件的記錄,然後以物件的形式封裝到List中去。此時假設有兩個條件A和B,滿足A的記錄集和為ListA,滿足B的記錄集合為ListB,現在要將ListA和ListB合併為一個List,注意ListA和ListB中可能有重複的記錄(因為可能某條記錄即滿足條件A又滿足條件B),要過濾掉重複的記錄。
方法過程:我們假設List中存放的物件都是Order物件,屬性orderId用於標識一個唯一的Order物件。
List<order> list = new ArrayList<Order>();
if(ListA!=null
Iterator it= ListA.iterator();
while(it.hasNext()){
list.add((Order)it.next());
}
}
if(ListB!=null){
Iterator it= ListB.iterator();
while(it.hasNext()){
Order o=(Order)it.next();
if(!list.contains(o))
list.add(o);
}
}
首先我們將ListA中的物件全部裝入到list中,然後在裝入ListB中物件的
時候對ListB中的每個元素進行一下判斷,看list
list.contains(o),系統會對list中的每個元素e呼叫o.equals(e),方法,加入list中有n個元素,那麼會呼叫n次o.equals(e),只要有一次o.equals(e)返回了true,那麼list.contains(o)返回true,否則返回false。因此為了很好的使用contains()方法,我們需要重新定義下Order類的equals方法,根據我們的業務邏輯,如果兩個Order物件的orderId相同,那麼我們認為它們代表同一條記錄,於是equals方法定義如下:
publicboolean equals(Object obj) {
if (this == obj)
returntrue;
if (obj == null)
returnfalse;
if (getClass() != obj.getClass())
returnfalse;
final Order other = (Order) obj;
if(this.getOrderid()!=other.getOrderid())
returnfalse;
returntrue;
}
這樣只要ListB中有一條記錄的orderId和list中的某條記錄的orderId
相等,那麼我們就認為該記錄已存在,不再將它放入list,這樣就避免了重複記錄的存在。