List去重复,我们首先想到的可能是 利用List转Set集合,因为Set集合不允许重复。所以达到这个目的。 如果集合里面是简单对象,例如Integer、String等等,这种可以使用这样的方式去重复。但是如果是复杂对象,即我们自己封装的对象。用List转Set 却达不到去重复的目的。 所以,回归根本。 判断Object对象是否一样,我们用的是其equals方法。 所以我们只需要重写equals方法,就可以达到判断对象是否重复的目的。

话不多说,上代码:

package com.test;

import java.math.BigDecimal;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

import org.apache.commons.collections.CollectionUtils;

public class TestCollection {

//去重复之前集合

private static List list = Arrays.asList(

new User("张三", BigDecimal.valueOf(35.6), 18),

new User("李四", BigDecimal.valueOf(85), 30),

new User("赵六", BigDecimal.valueOf(66.55), 25),

new User("赵六", BigDecimal.valueOf(66.55), 25),

new User("张三", BigDecimal.valueOf(35.6), 18));

public static void main(String[] args) {

//排除重复

getNoRepeatList(list);

}

/**

* 去除List内复杂字段重复对象

* @param oldList

* @return

*/

private static List getNoRepeatList(List oldList){

List list = new ArrayList<>();

if(CollectionUtils.isNotEmpty(oldList)){

for (User user : oldList) {

//list去重复,内部重写equals

if(!list.contains(user)){

list.add(user);

}

}

}

//输出新版集合

System.out.println("去除重复后新版集合:");

if(CollectionUtils.isNotEmpty(list)){

for (User user : list) {

System.out.println(user.toString());

}

}

return list;

}

static class User{

private String userName; //姓名

private BigDecimal score;//分数

private Integer age;

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public BigDecimal getScore() {

return score;

}

public void setScore(BigDecimal score) {

this.score = score;

}

public Integer getAge() {

return age;

}

public void setAge(Integer age) {

this.age = age;

}

public User(String userName, BigDecimal score, Integer age) {

super();

this.userName = userName;

this.score = score;

this.age = age;

}

public User() {

// TODO Auto-generated constructor stub

}

@Override

public String toString() {

// TODO Auto-generated method stub

return "姓名:"+ this.userName + ",年龄:" + this.age + ",分数:" + this.score;

}

/**

* 重写equals,用于比较对象属性是否共含

*/

public boolean equals(Object obj) {

if (obj == null) {

return false;

}

if (this == obj) {

return true;

}

User user = (User) obj;

//多重逻辑处理,去除年龄、姓名相同的记录

if (this.getAge() .compareTo(user.getAge())==0

&& this.getUserName().equals(user.getUserName())

&& this.getScore().compareTo(user.getScore())==0) {

return true;

}

return false;

}

}

}

执行结果:

去除重复后新版集合:

姓名:张三,年龄:18,分数:35.6

姓名:李四,年龄:30,分数:85

姓名:赵六,年龄:25,分数:66.55

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习网上卖,谢谢大家对乐购源码的支持。如果你想理解更多相关内容请查看下面相关链接

java复杂判断_List集合多个复杂字段判断去重的案例相关推荐

  1. java list子类_List集合的子类ArrayList、LinkedList、Vector

    List:有序,有索引,可重复. |--ArrayList:底层数据结构是 数组结构.是线程不同步的(不安全的).查询速度很快,但是增删较慢. 构造一个初始容量为 10 的空列表,当放满了10个元素后 ...

  2. 在Java开发中,判断list集合为空还是为null的区别

    在Java开发中,判断list集合为空还是为null的区别 案例测试1 为什么输出not null,是因为null判断的是否对List集合分配内存空间,为不是List集合里面内容是否为空 案例测试2 ...

  3. java set 包含_Java Set.contains()方法:判断Set集合是否包含指定的对象

    Java 集合类中的 Set.contains() 方法判断 Set 集合是否包含指定的对象.该方法返回值为 boolean 类型,如果 Set 集合包含指定的对象,则返回 true,否则返回 fal ...

  4. java map key是否存在_java中如何判断map集合中是否存在key

    有两种方法可以判断map集合中是否存在某个key. 方法1:直接使用java api提供的containsKey(): 方法2:循环遍历,逐个比较. java相关视频推荐:java视频 具体实现代码如 ...

  5. java map key是否存在_java如何判断map集合中是否存在key?

    java如何判断map集合中是否存在key?,方法,遍历,不存在,键值,是一个 java如何判断map集合中是否存在key? 易采站长站,站长之家为您整理了java如何判断map集合中是否存在key? ...

  6. java list 为空_判断List集合为空或null

    判断List集合是否为空 Java中,判断List集合是否为空与是否为null并不相同 新建List对象,默认是为空,即没有数据,而不是null 如: List list = new ArrayLis ...

  7. java判断集合为空_Java中判断集合类为空的方法

    *****需要引入Spring的核心Jar包***** 工具类: org.springframework.util.CollectionUtils 方法: public static boolean ...

  8. java中判断集合为空_java如何判断list集合为空

    1.如果想判断list是否为空,可以这么判断: if(null == list || list.size() ==0 ){ //为空的情况 }else{ //不为空的情况 } 2.list.isEmp ...

  9. [转]Java中常用的集合—初学者的你不可错过的精编整理

    集合一直都是项目中非常常见的,我是一个Android开发者,集合对于我来说,在项目中使用的次数非常之多,因为使用的多,熟能生巧,所以这里呢!就给那些初学者整理一下Java当中常用的集合吧!    因为 ...

最新文章

  1. Linux目录读写和可执行权限
  2. mysql去除字符串首的非字母_如何从SQLServer中的字符串中删除所有非字母字符?...
  3. [Python] sys.argv[] 用法
  4. 不定高度的弹框 垂直水平居中
  5. 解密所有APP运行过程中的内部逻辑
  6. HADOOP都升级到2.5啦~~~
  7. 十分钟了解Kubernetes
  8. LeetCode 1754. 构造字典序最大的合并字符串
  9. 20145308刘昊阳 20145302张薇《信息安全系统设计基础》实验五:网络通信 实验报告...
  10. 比较连续分配、分页和分段三种存储分配机制的优缺点_第十九期-处理器存储模型概述(1)...
  11. [转]struct 和typedef struct什么区别
  12. Zimbra的zmcontral服务无法起来,提示ldap有问题。
  13. 注:以前我的博客,因为丢了用户名和口令,无法使用,声明作废;现转于此。...
  14. 移动机顶盒cm211-1 刷机
  15. gp3688 uhf2扩频_摩托罗拉GP3688_GP3188写频软件
  16. 公司职员薪水管理系统(List)
  17. 嵌入式Linux:V3s移植NES游戏,声音,游戏手柄
  18. 2022年全球及中国叔十二烷基硫醇行业头部企业市场占有率及排名调研报告
  19. C++ search()函数用法详解(深入了解,一文学会)
  20. [反汇编练习] 160个CrackMe之023

热门文章

  1. ubuntu 下使用 upnp 配置路由器端口映射
  2. 链表之节点插入、删除节点、遍历打印、遍历释放,static 全局变量
  3. embedding = torch.nn.Embedding(10, 3)
  4. RSA密钥生成、加密解密、数据签名验签
  5. 代理https遇到问题错误代码:MOZILLA_PKIX_ERROR_MITM_DETECTED
  6. InnovMetric PolyWorks Metrology Suite 2021 IR2
  7. Polyworks脚本开发学习笔记(十七)-制作宏脚本自定义工具条
  8. 可见性剔除_使用分层遮挡贴图进行可见性剔除(6.实现与性能表现-2.性能表现)...
  9. 万科郁亮:不赚最后一枚铜板,不盯竞争对手
  10. 极路由:互联网思维颠覆传统路由