根據單個或多個字段對list對象去重

pojo  省略  app

在list 對象中,根據某一字段進行去重,重寫Comparatoride

 1     /**
 2      * 去重
 3      * 
 4      * @param orderList
 5      * @return
 6      * @author ziggo
 7      */
 8     private static List<Drug> removeDuplicateOrder(List<Drug> orderList) {
 9         Set<Drug> set = new TreeSet<Drug>(new Comparator<Drug>() {
10             @Override
11             public int compare(Drug a, Drug b) {
12                 // 字符串則按照asicc碼升序排列
13                 return a.getName().compareTo(b.getName());
14             }
15         });
17         set.addAll(orderList);
18         return new ArrayList<Drug>(set);
19     }

在list 對象中,根據多個字段進行去重,重寫Comparatorthis

    /**
     * 去重(廢棄,多條件下莫名失效)
     * 
     * @param orderList
     * @return
     * @author ziggo
     */
    private static List<Drug> removeDuplicateOrder(List<Drug> orderList) {
        Set<Drug> set = new TreeSet<Drug>(new Comparator<Drug>() {
            @Override
            public int compare(Drug a, Drug b) {
                int compareToResult = 1;// ==0表示重複
                // 字符串則按照asicc碼升序排列
                if (a.getName().equals(b.getName()) && a.getDepartment().equals(b.getDepartment())) {
                    compareToResult = 0;
                }
                return compareToResult;
            }
        });

        set.addAll(orderList);
        return new ArrayList<Drug>(set);
    }

進行重寫Comparator根據多個字段去重時,發現該方法不能正常去重,目前還沒排查到什麼緣由,因而查找了另一種方式,在pojo中重寫equals方法spa

實體類:DRUGcode

package com.msun.mr.app.pojo;

/**
 * @author d_hb 藥品信息
 */
public class Drug {
    /**

 省略字段部分
********************************


*/
    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (this == obj) {
            return true;
        }
        Drug drug = (Drug) obj;
        if (this.getName() .compareTo(drug.getName())==0
                && this.getDepartment().equals(drug.getDepartment()) && this.getSpec_id().equals(drug.getSpec_id())){
            return true;
        }
        return false;
    }
}

 

 判斷重複邏輯,同時知足三個字段時,去重對象

    // 去重(重寫equals方法)
    private static List<Drug> removeDuplicateInvoice(List<Drug> orderList) {
        List<Drug> list = new ArrayList<>();
        if (CollectionUtils.isNotEmpty(orderList)) {
            for (Drug drug : orderList) {
                // list去重複,內部重寫equals
                if (!list.contains(drug)) {
                    list.add(drug);
                }
            }
        }
        return list;
    }

因此,目前代碼使用的去重邏輯是:單個字段去重時重寫了Comparator,多個字段去重時,重寫equals方法.不過我感受多個字段去重一樣使用重寫Comparator方法也能實現,暫時定位不到問題............blog

相關文章
相關標籤/搜索