pojo 省略
在list 对象中,根据某一字段进行去重,重写Comparator
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 对象中,根据多个字段进行去重,重写Comparator
/** * 去重(废弃,多条件下莫名失效) * * @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方法
实体类:DRUG
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方法也能实现,暂时定位不到问题............