根据单个或多个字段对list对象去重
2019-10-16 08:17:31来源:博客园 阅读 ()
根据单个或多个字段对list对象去重
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方法也能实现,暂时定位不到问题............
原文链接:https://www.cnblogs.com/by-xu/p/11683742.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- Java Spring注入一个接口的多个实现类在map里如何实现?案 2020-06-04
- spring注入map,spring注入一个接口的多个实现类在map里 2020-06-03
- 接口 2020-06-01
- Java-IO流学习 2020-05-18
- 如何实现JDK10的新特性:var泛型和多个接口,案例详解 2020-05-18
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash