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. JZOI1062 【USACO2013JAN】invite

    #include <bits/stdc++.h> #define ll long long #define INF 2147483647 #define ll_INF 9223372036 ...

  2. 如何在普通用户权限cmd怎么使用命令行变为管理员权限

    这两天在弄MySql,由于我下载的是免安装版本,环境自己配置了一下.有强迫症不喜欢某些服务打开在我不需要的时候,我一般都设置为手动,但是每次使用数据库时都要使用net start mysql启动MyS ...

  3. yang文件语法格式

    前言 NETCONF(Network Configuration Protocol),该协议的配置功能非常强大,同时兼顾监控和故障管理,安全验证和访问控制,得到业界的一致认可,被广泛用来配置网络 NE ...

  4. 6. Python运算符之算术、比较、赋值运算符

    什么是运算符?举个简单的例子 4 +1 = 5 . 例子中,4 和 1 被称为操作数,"+" 和"="称为运算符. 工作中用到的运算符主要有以下几种:算术运算符 ...

  5. 10. Tasks and functions

    Frm: IEEE Std 1364™-2001, IEEE Standard Verilog® Hardware Description Language 10. Tasks and functio ...

  6. Netty 源码分析——ChannelPipeline

    Netty 源码分析--ChannelPipeline 通过前面的两章我们分析了客户端和服务端的流程代码,其中在初始化 Channel 的时候一定会看到一个 ChannelPipeline.所以在 N ...

  7. 一、微服务概述与SpringCloud

    一.微服务概述与SpringCloud 1.微服务与微服务架构 微服务强调的是服务的大小,它关注的是某一个点,是具体解决某一个问题/提供落地对应服务的一个服务应用,狭意的看,可以看作Eclipse里面 ...

  8. Aggregate report 聚合报告

  9. keepAlived主备及双主

    nginx用默认配置即可 1.主备配置 1.主keepAlived配置 vrrp_instance VI_1 { state MASTER #主备区分 interface eth0 virtual_r ...

  10. VBA+SQL transform pivot union联合查询的基础应用

    Sub 项目状态查询() '如果“项目状态”是未转运营那么实施状态是不能选择的,因为还没有实施.'如果“项目状态”选择状态后,那么项目名称里面只显示该状态的项目名称.如果“项目状态”选择的不是未转运营 ...