1. 程式人生 > >將ListA和ListB合併為一個List

將ListA和ListB合併為一個List

應用環境:從資料庫中查詢出滿足一系列條件的記錄,然後以物件的形式封裝到List中去。此時假設有兩個條件AB,滿足A的記錄集和為ListA,滿足B的記錄集合為ListB,現在要將ListAListB合併為一個List,注意ListAListB中可能有重複的記錄(因為可能某條記錄即滿足條件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()方法。它的原理是這樣的:如上例中的

list.contains(o),系統會對list中的每個元素e呼叫o.equals(e),方法,加入list中有n個元素,那麼會呼叫no.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中有一條記錄的orderIdlist中的某條記錄的orderId

相等,那麼我們就認為該記錄已存在,不再將它放入list,這樣就避免了重複記錄的存在。