List去重复——多个复杂字段判断去重

来源:互联网 发布:网络信息管理办法 编辑:程序博客网 时间:2024/04/30 08:11

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<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内复杂字段重复对象 * @author : shijing * 2017年6月2日上午11:28:20 * @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去重复,内部重写equalsif(!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}@Overridepublic String toString() {// TODO Auto-generated method stubreturn "姓名:"+ 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





原创粉丝点击