首页 > 开发 > Java > 正文

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

2024-07-14 08:43:06
字体:
来源:转载
供稿:网友

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<User> 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<User> getNoRepeatList(List<User> oldList){ List<User> 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

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对VeVb武林网的支持。


注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表