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. FS获取KERNEL32基址的三种方法

    FS寄存器指向当前活动线程的TEB结构(线程结构) 偏移  说明 000  指向SEH链指针 004  线程堆栈顶部 008  线程堆栈底部 00C  SubSystemTib 010  FiberD ...

  2. idea整合springboot,访问templates下html资源问题

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

  3. 浅谈学习selenium的一些知识点的总结

    学习自动化测试,先得学习一门语言.自动化对语言要求掌握的程度不深,但必须得会基本的入门语法. 我学习的是python2,简单,易懂,上手快. 每天敲就是了. 我的学习路径是: 先学习一段时间pytho ...

  4. plsql初次连接oracle报错解决方案

    windows7 64bit Oracle win64 11gR2(两个文件) PL/SQL v9.0 详细错误信息 Initialization error Could not initialize ...

  5. PHP对象在内存中的分配(转载)

    http://www.cnblogs.com/hongfei/archive/2012/06/12/2547120.html 对像在PHP 里面和整型.浮点型一样,也是一种数据类,都是存储不同类型数据 ...

  6. Linux SSH证书登陆

    创建证书 ssh-keygen -t rsa -b 4096 -C "your_email@example.com" 证书导入以后,执行 eval "$(ssh-agen ...

  7. zabbix--添加用户

    用户和用户组   概述 Zabbix 中的所有用户都通过 Web 前端去访问 Zabbix 应用程序.并为每个用户分配唯一的登陆名和密码. 所有用户的密码都被加密并储存于 Zabbix 数据库中.用户 ...

  8. man bash

    BASH(1) General Commands Manual BASH(1) NAME bash - GNU Bourne-Again SHell SYNOPSIS bash [options] [ ...

  9. docker容器和宿主机时间不一致的问题

    第1种:复制宿主机的localtime文件,到容器里docker cp /etc/localtime threg:/etc/ 注:这里 threg为容器名称,复制完后需重启容器 第2种在构建docke ...

  10. 完美编译街机模拟器MAME(Android版)基于MAME4all

    重新编译MAME4droid源码 github上开源项目MAME4all可将MAME模拟器运行在iOS和Android上,还有一个比较有名的叫MAME4droid(MAME for android), ...