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. idea整合springboot,访问templates下html资源问题

    1.pom.xml文件中要引入themyleaf 2.在application.properties文件中加入 #拼接html前后缀spring.resources.static-locations= ...

  2. libvert开启TCP监听

    1.设置libvirtd 编辑/etc/libvirt/libvirtd.conf listen_tls = 0 listen_tcp = 1 auth_tcp="none" tc ...

  3. CentOS6.8搭建LNMP环境

    selinux可能会致使编译安装失败,我们先禁用它.永久禁用,需要重启生效 sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/g’ /etc/selinux/c ...

  4. 4.2 react patterns(转)

    修改 Props Immutable data representation 确定性 在 getInitialState 中使用 props 私有状态和全局事件 render 包含 side effe ...

  5. 2、使用siege进行服务端性能测试

    先查看siege帮助 输入siege -h 翻译一下常用命令 -c 指定并发数 -r 指定重复次数 -d 指定请求的延迟时间,注意每个请求间随机延迟 -f 指定url列表,可以一次给多个地址加压 -t ...

  6. jQuery validate验证隐藏表单(hidden)域

    validate很不错的一个jQuery表单验证插件.升级到了1.9版的后,发现隐藏表单域验证全部失效,特别是在jquery.ui.tabs.min.js构造的Tabs里的验证!网上一搜,也没查到是怎 ...

  7. mariadb入门

    MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可.开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方 ...

  8. Java类与类的关系、继承与多态、重写与重载

    Java类与类的关系 (1)is-a包括了 继承,实现关系 (2)has-a包括了 关联,聚合,组合关系 (3)use-a包括了 依赖关系 实现关系: 实现指的是一个class类实现interface ...

  9. webpack 配置之入门二(css 篇)

    在项目中我们通过 css 来美化页面,css 也成为了网站不可或缺的一部分,这章节主要介绍 webpack 处理 css 部分, 1.webpack 处理 css 在 webpack 中,我们通过 s ...

  10. vue之自定义指令

    1.自定义指令的作用 除了核心功能默认内置的指令 (v-model 和 v-show),Vue 也允许注册自定义指令.注意,在 Vue2.0 中,代码复用和抽象的主要形式是组件.然而,有的情况下,你仍 ...