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