前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >List去重复——多个复杂字段判断去重

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

作者头像
执笔记忆的空白
发布2020-12-25 14:47:06
2.6K0
发布2020-12-25 14:47:06
举报
文章被收录于专栏:Java日常Java日常

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

话不多说,上代码:

代码语言:javascript
复制
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去重复,内部重写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;  
	    }  
	}
	
}

执行结果:

代码语言:javascript
复制
去除重复后新集合:
姓名:张三,年龄:18,分数:35.6
姓名:李四,年龄:30,分数:85
姓名:赵六,年龄:25,分数:66.55
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-06-02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档