同一个类生成的对象去重
场景
在项目中,对数组或者集合中的重复元素去重是一个比较常见的场景。而类似Set这类集合也自带了去重功能。
但是如果数组或者集合中的元素是一个由同一个类创建的多个对象呢,对象有多个属性,每一个属性值都相同,该如何去重?
以下提供一个简单的算法解决以上问题。
思路
- 挑出对象中的一个属性,作为一个基准;
- 遍历对象;
- 将所挑选的对象的值塞进Set集合;
- 判断Set集合中是否含有该值,如果有,进行第3步;如果没有,进行第2步。
演示
创建一个实体类Friends,简化成两个属性:
public class Friends {
private String name;
private int age;
public Friends(String name, int age) {
this.name = name;
this.age = age;
}
// set/get省略...
}
去重算法(核心):
/**
* 去重方法
*
* @param friends 需要去重的对象集合
* @return 已经去重的对象集合
*/
private static List<Friends> distinctFriends(List<Friends> friends){
List<Friends> friendsDistinct = new ArrayList<>();
Set<String> set = new HashSet<>();
for (Friends friend:friends){
String key = friend.getName();
if(!set.contains(key)){
set.add(key);
friendsDistinct.add(friend);
}
}
return friendsDistinct;
}
测试:
public static void main(String[] args) {
Friends friends1 = new Friends("admin",21);
Friends friends2 = new Friends("admin",21);
List<Friends> friends = new ArrayList<>();
friends.add(friends1);
friends.add(friends2);
List<Friends> distinctedFriends2 = distinctFriends(friends);
System.out.println(distinctedFriends2);
}
结果: