关闭

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

2389人阅读 评论(0) 收藏 举报
分类:

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去重复,内部重写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





1
0
查看评论

去除List集合中的重复值(四种好用的方法)

**如何去除List集合中的重复值?** 最近项目中需要对list集合中的重复值进行处理,大部分是采用两种方法,一种是用迭代list集合判断后赋给另一个list集合,一种是用赋给set集合再返回给list集合。 但是赋给set集合后,由于set集合是无序的,原先的顺序就打乱了。所...
  • cs6704
  • cs6704
  • 2015-12-03 11:28
  • 89341

Java中List集合去除重复数据的方法

1. 循环list中的所有元素然后删除重复 public static List removeDuplicate(List list) { for ( int i = 0 ; i < list.size() - 1 ; i ++ ) { ...
  • u011728105
  • u011728105
  • 2015-06-22 18:50
  • 42223

List集合去除重复对象及equals()、hashCode()方法的作用

在java中,要将一个集合中重复的对象除去,如果这个集合中的数据类型是基本数据类型,可以直接将list集合转换成set,就会自动去除超重复的元素,大家都知道set集合的特点就是没有重复的,这个就相对比较简单,这里不在详细说,我们下面说的list集合中的数据类型是一个对象类型的。   ...
  • freelander_j
  • freelander_j
  • 2016-08-15 15:27
  • 7370

JAVA 中ArrayList如何去除重复项方法。

Java 中Collection实现类ArrayList如何去除重复项。以下列出了几种方法,以不同的方面去考虑。 (1)通过循环剔除重复项:使用双向的for循环,依次取出集合中元素进行比较。【基本类型。自定义类型自定义比较方法】 public static void removeDuplicat...
  • xianSky2015
  • xianSky2015
  • 2016-02-19 19:08
  • 1879

去除list集合中重复项的几种方法

去除list集合中重复项的几种方法 因为用到list,要去除重复数据,尝试了几种方法。记录于此。。。 测试数据:        Liststring> li1 = new Liststring> { "8", "8", &quo...
  • rentian1
  • rentian1
  • 2016-11-15 08:41
  • 3478

java List 2个List 合并后去重, 或单个List 去重

1. 单个List 去重:     如果用的是Set集合就不用怕重复的问题了,如果用的List就要想办法将它变为Set package com; import java.util.ArrayList; import java.util.HashSet; import jav...
  • huaishuming
  • huaishuming
  • 2015-08-19 11:46
  • 11097

List多个字段排序、去重

List集合排序是通过java.util.Collections中的sort
  • siqilou
  • siqilou
  • 2014-11-13 15:47
  • 2011

List列表中根据某一个字段,进行去重!

比如得到的List中有10个User对象,现在要求UserName相同的对象只保留一个,下面给大家介绍两种较简便的方法,       方法一:首先建一个空的list1和一个HashMap,然后对List进行for循环,在for循环中得到List中的User对象,将Us...
  • u011370617
  • u011370617
  • 2016-01-13 14:17
  • 5835

Java List去重的两种方法

通过Iterator遍历,利用remove方法移除: public void testList() {    List list=new ArrayList();    list.add(1);  list.add(2);  list.a...
  • Sherry_Rui
  • Sherry_Rui
  • 2016-04-05 19:32
  • 1336

Java 之List根据对象字段名去重复

实体PersionInfo类 public class PersionInfo { private String name; private String sex; private int age; public String getName() { ...
  • jky_yihuangxing
  • jky_yihuangxing
  • 2016-02-24 13:46
  • 1905
    个人资料
    • 访问:593251次
    • 积分:5605
    • 等级:
    • 排名:第5622名
    • 原创:102篇
    • 转载:33篇
    • 译文:0篇
    • 评论:364条
    个人简介
    我只是一个简单的Coder,为了兴趣和理想奋斗在生活的道路上
    希望大家多多交流,共同进步,有疑问或想法请留言或者私信,也可以加群:157797573

    博客专栏
    最新评论
    你还在一个人孤独的奋斗吗?
    其实,你并不寂寞,欢迎加入CSDN Java群,这里是你的另一个家!    点击加入:CSDN Java群