热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

List集合多个复杂字段判断去重的案例

今天小编就为大家分享一篇关于List集合多个复杂字段判断去重的案例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

List去重复,我们首先想到的可能是 利用ListSet集合,因为Set集合不允许重复。所以达到这个目的。 如果集合里面是简单对象,例如IntegerString等等,这种可以使用这样的方式去重复。但是如果是复杂对象,即我们自己封装的对象。用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中使用org.apache.xalan.templates.AVTPartSimple类,并提供了多个实际的代码示例,帮助开发者更好地理解和运用这一类。 ... [详细]
  • 在Linux系统上构建Web服务器的详细步骤
    本文详细介绍了如何在Linux系统上搭建Web服务器的过程,包括安装Apache、PHP和MySQL等关键组件,以及遇到的一些常见问题及其解决方案。 ... [详细]
  • window下kafka的安装以及测试
    目录一、安装JDK(需要安装依赖javaJDK)二、安装Kafka三、测试参考在Windows系统上安装消息队列kafka一、安装JDKÿ ... [详细]
  • Java EE CDI:解决依赖关系冲突的实例
    在本教程中,我们将探讨如何在Java EE的CDI(上下文和依赖注入)框架中有效解决依赖关系的冲突问题。通过学习如何使用限定符,您将能够为应用程序的不同客户端提供多种接口实现,并确保每个客户端都能正确调用其所需的实现。 ... [详细]
  • 深入理解Java MySQL数据库连接池实现
    尽管利用Apache Commons DBCP等工具可以轻松构建数据库连接池,但本文详细解析了数据库连接池的工作机制,提供了详尽的注释,帮助开发者深入理解其内部运作。这不仅有助于提高数据库操作的效率,还能增强应用程序的稳定性和性能。 ... [详细]
  • 本文详细介绍了如何在 Windows Server 2008 R2 64位操作系统上配置 BugFree 3.0.3 的服务器环境,包括所需软件的安装与配置步骤。 ... [详细]
  • ServletContext接口在Java Web开发中扮演着重要角色,它提供了一种方式来获取关于整个Web应用程序的信息。通过ServletContext,开发者可以访问初始化参数、共享数据以及应用资源。 ... [详细]
  • 本文深入探讨了JMeter中的参数解析及其线程组插件的应用,重点介绍了聚合报告的各项关键指标,并提供了详细的插件安装步骤。 ... [详细]
  • 本文探讨如何使用 PHP 进行字符串处理,特别是如何检测一个字符串是否存在于另一个字符串中,并确定其具体位置。通过实例代码展示,帮助读者掌握这一常用功能。 ... [详细]
  • 本文详细介绍了几种常见的开源许可证,包括BSD、GPL、LGPL、MIT、Apache、MPL和CDDL等,探讨了各自的特性和适用场景。 ... [详细]
  • PySpark实战:高效使用DataFrame超越RDD
    本文深入探讨了PySpark中DataFrame的使用方法及其相对于传统RDD的优势,旨在帮助开发者更好地理解和利用这一强大工具。 ... [详细]
  • 本文详细介绍了 Java 中 freemarker.ext.dom.NodeModel 类的 removeComments 方法,并提供了多个实际使用的代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.commons.httpclient.HttpConnection 类的 getProxyPort 方法的使用方法和代码示例,帮助开发者更好地理解和应用此方法。 ... [详细]
  • 使用Jenkins构建Java项目实践指南
    本指南详细介绍了如何使用Jenkins构建Java项目,包括环境搭建、工具配置以及项目构建的具体步骤。 ... [详细]
  • 深入解析Spark核心架构与部署策略
    本文详细探讨了Spark的核心架构,包括其运行机制、任务调度和内存管理等方面,以及四种主要的部署模式:Standalone、Apache Mesos、Hadoop YARN和Kubernetes。通过本文,读者可以深入了解Spark的工作原理及其在不同环境下的部署方式。 ... [详细]
author-avatar
mobiledu2502874483
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有