pojo  省略

在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) {
// 字符串则按照asicc码升序排列
return a.getName().compareTo(b.getName());
}
});
set.addAll(orderList);
return new ArrayList<Drug>(set);
}

在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方法也能实现,暂时定位不到问题............

根据单个或多个字段对list对象去重的更多相关文章

  1. MyBatis数据库字段和实体对象属性名不一致的解决方案

    数据库和对象的属性名不一致是很常见的问题,这个时候依从表字段到对象属性名的按名称匹配映射已经搞不定这个了,下面是几种解决方案. 1. 开启驼峰转换 如果数据库中的字段名与对象只是简单的不一致的话,比如 ...

  2. odoo 的字段。orm对象

    OpenERP ORM 对象方法列表   OpenERP对象支持的字段类型有,基础类型:char, text, boolean, integer, float, date, time, datetim ...

  3. 【MM系列】SAP ABAP 编辑字段出现:对象编辑中的错误

    公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP 编辑字段出现: ...

  4. json字符串转java对象,json中字段名称与对象属性名称不一致

    json字符串转java对象,json字段名称与对象属性名称不一致可以在对象属性上添加注解@SerializedName解决

  5. 【Django】使用list对单个或者多个字段求values值

    使用list对values进行求值: 单个字段的输出结果: price_info=list(Book.objects.filter(auth_id='Yu').values('book_price') ...

  6. DataTable添加单个或多个字段组成的主键,实现查找

    单列主键 DataTable fdt = CmmDb.GetDataTable(orgsql); fdt.PrimaryKey = new DataColumn[] { fdt.Columns[&qu ...

  7. 在lua中创建字段安全的对象

    lua萌新,刚刚学习和使用不到一个月.有不对的地方,还望各路大神不吝赐教. lua中可以用table来模拟对象,但table是可以任意增加键值的.在对象模拟中,暂且也叫它为字段(field)吧.如果在 ...

  8. SQLserver2016对字段是json对象查询

    现在2016内置对json对象的查询支持了.正好项目中用到,做个备忘 如果字段内容是: [{"tagid":"100015","orderid&quo ...

  9. json对象去重,根据指定字段

    function FilterByName(data, Name) { //data是json对象,Name是根据什么字段去重 var map = {}, dest = []; for (var i ...

随机推荐

  1. mongodb 查询指定字段

    @AutowiredMongoDatabase database; @Overridepublic List<Grid> getAdditionalGrid(String collecti ...

  2. requests_html爬虫小练习

    爬取豆瓣TOP250 from requests_html import HTMLSession #新建一个html文件,将相应的代码放入,运行查看结果,如果页面全部渲染则直接根据页面信息获得数据: ...

  3. jenkins集成sonar代码审核工具

    在项目测试管理过程中,项目上线很多时候时间仓促,导致代码质量不高,测试时间不充分会导致线上出现各种各样的问题,这个时候一方面是增加测试的质量把控,还要从根本上解决开发小哥的代码质量问题.而Sonar这 ...

  4. testNG官方文档翻译-4 运行TestNG

    TestNG可以通过不同的方法触发运行: 命令行 ant Eclipse IntelliJ's IDEA

  5. 6.2_springboot2.x分布式整合Dubbo

    1.分布式应用 ​ 在分布式系统中,国内常用zookeeper+dubbo组合,而Spring Boot推荐使用全栈的Spring,Spring Boot+Spring Cloud. 分布式系统: 特 ...

  6. 《深入理解Java虚拟机》- 重载与重写

    这一节打算从“方法调用”的主题进行分析. 方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不设计方法内部的具体运行过程. 一.概念 解析调用:所有 ...

  7. <爬虫>相关的知识

    1.概念.工具和HTTP 什么是爬虫 模拟客户端发送网络请求,获取响应,按照规则提取数据 爬虫的数据去哪了 展示到网页上(百度新闻,今日头条) 进行分析,从数据中寻找规律(指数网站:百度指数) 需要的 ...

  8. ABP 3.7版本迁移数据库报错未能加载文件或程序集“Castle.Core, Version=4.0.0.0”

    ABP 3.7 3.8版本升级后迁移数据库,报错未能加载文件或程序集“Castle.Core, Version=4.0.0.0”,System.ComponentModel.Annotations也可 ...

  9. wpf中datagrid绑定数据源发生改变

    1.若datagrid绑定的数据源是同一个的话,即使里面的数据不同.页面也不会刷新,则需要重置数据源,再绑定.处理如下: datagrid1.ItemsSource=ListModule; 若List ...

  10. iOS录音后播放声音变小的解决方法

    目前需求是录音之后再播放出来.经常会出现播放声音变很小的情况. 解决方法: if (recorder.recording){ [recorder stop]; } [[AVAudioSession s ...