最近在项目中有需要对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