List中根据某个实体的属性去重

一、简介

最近在项目中有需要对List我们自定义对象中的某个字段属性进行去重,于是封装了一些方法来进行去重。下面将总结三种方法根据某个字段属性进行List去重的方法。

二、去重

【a】工具类:ListDistinctUtils.java

public class ListDistinctUtils {

	/**
	 * 使用TreeSet结合Comparator比较器实现List中stuName字段去重 
* * @author weixiaohuai * @modify_by weixiaohuai * @param oldList * @return */ public static List distinctBySet01(List oldList) { Set set = new TreeSet<>(new Comparator() { @Override public int compare(T o1, T o2) { /** * compareTo : 两个相同数据类型的比较,两个不同类型的数据不能用此方法来比较
* 如果指定的数与参数相等返回: 0
* 如果指定的数小于参数返回 : -1
* 如果指定的数大于参数返回 : 1
*/ return o1.getStuName().compareTo(o2.getStuName()); } }); set.addAll(oldList); return new ArrayList<>(set); } /** * 使用Set实现List中stuName字段去重
* * @author weixiaohuai * @modify_by weixiaohuai * @param oldList * @return */ public static List distinctBySet02(List oldList) { Set set = new HashSet<>(); List newList = new ArrayList<>(); for (T t : oldList) { if (!set.contains(t.getStuName())) { set.add(t.getStuName()); newList.add(t); } } return newList; } /** * 使用Map实现List中stuName字段去重
* * @author weixiaohuai * @modify_by weixiaohuai * @param oldList * @return */ public static List distinctByMap(List oldList) { Map existMap = new HashMap(); List newList = new ArrayList<>(); for (T t : oldList) { String name = null != existMap.get(t.getStuName()) ? existMap.get(t.getStuName()).toString() : ""; // 如果name为空表示不存在 if (StringUtils.isBlank(name)) { existMap.put(t.getStuName(), t.getStuName()); newList.add(t); } } return newList; } }

【b】测试用例: Test.java

public class Test {
	public static void main(String[] args) {

		/**
		 * 根据List中Student对象属性(stuName)进行去重
		 */
		List studentsList = new ArrayList<>();
		Student student1 = new Student(UUID.randomUUID().toString(), "zhangsan", 12);
		Student student2 = new Student(UUID.randomUUID().toString(), "lisi", 22);
		Student student3 = new Student(UUID.randomUUID().toString(), "zhangsan", 12);
		Student student4 = new Student(UUID.randomUUID().toString(), "wangwu", 15);
		studentsList.add(student1);
		studentsList.add(student2);
		studentsList.add(student3);
		studentsList.add(student4);
		System.out.println("去重前:" + studentsList);

		List newStudentList = ListDistinctUtils.distinctBySet01(studentsList);
		System.out.println("[distinctBySet01]去重后:" + newStudentList);
		for (Student student : newStudentList) {
			System.out.println("学生姓名:" + student.getStuName());
		}

		List newStudentList2 = ListDistinctUtils.distinctBySet02(studentsList);
		System.out.println("[distinctBySet02]去重后:" + newStudentList2);
		for (Student student : newStudentList2) {
			System.out.println("学生姓名:" + student.getStuName());
		}

		List newStudentList3 = ListDistinctUtils.distinctByMap(studentsList);
		System.out.println("[distinctByMap]去重后:" + newStudentList3);
		for (Student student : newStudentList3) {
			System.out.println("学生姓名:" + student.getStuName());
		}
	}
}

【c】运行结果:

去重前:[Student [stuId=0ef7d96a-b83a-4810-add1-9d143edf643e, stuName=zhangsan, stuAge=12], Student [stuId=29f119e2-b8ed-41fa-b7d0-d6e7fc87f674, stuName=lisi, stuAge=22], Student [stuId=05cf5e6a-3a73-43f9-8094-f3887a26691f, stuName=zhangsan, stuAge=12], Student [stuId=901cbd1b-da67-4058-b406-6c369df51c49, stuName=wangwu, stuAge=15]]
[distinctBySet01]去重后:[Student [stuId=29f119e2-b8ed-41fa-b7d0-d6e7fc87f674, stuName=lisi, stuAge=22], Student [stuId=901cbd1b-da67-4058-b406-6c369df51c49, stuName=wangwu, stuAge=15], Student [stuId=0ef7d96a-b83a-4810-add1-9d143edf643e, stuName=zhangsan, stuAge=12]]
学生姓名:lisi
学生姓名:wangwu
学生姓名:zhangsan
[distinctBySet02]去重后:[Student [stuId=0ef7d96a-b83a-4810-add1-9d143edf643e, stuName=zhangsan, stuAge=12], Student [stuId=29f119e2-b8ed-41fa-b7d0-d6e7fc87f674, stuName=lisi, stuAge=22], Student [stuId=901cbd1b-da67-4058-b406-6c369df51c49, stuName=wangwu, stuAge=15]]
学生姓名:zhangsan
学生姓名:lisi
学生姓名:wangwu
[distinctByMap]去重后:[Student [stuId=0ef7d96a-b83a-4810-add1-9d143edf643e, stuName=zhangsan, stuAge=12], Student [stuId=29f119e2-b8ed-41fa-b7d0-d6e7fc87f674, stuName=lisi, stuAge=22], Student [stuId=901cbd1b-da67-4058-b406-6c369df51c49, stuName=wangwu, stuAge=15]]
学生姓名:zhangsan
学生姓名:lisi
学生姓名:wangwu

 

你可能感兴趣的:(Java后端)