java代码用泛型实现一个根据List中的某个对象去重
时间: 2024-03-22 07:37:01 浏览: 74
可以使用泛型编写一个根据List中的某个对象去重的方法,如下所示:
```
public static <T, E> List<T> removeDuplicates(List<T> list, Function<T, E> keyExtractor) {
Set<E> set = new HashSet<>();
List<T> result = new ArrayList<>();
for (T item : list) {
E key = keyExtractor.apply(item);
if (!set.contains(key)) {
set.add(key);
result.add(item);
}
}
return result;
}
```
在这个方法中,我们使用了Java 8的Function接口来提取List中每个元素的关键字。这个接口接受一个参数,并返回一个值,可以用于将一个对象转换成另一个对象。
在removeDuplicates方法中,我们传入了两个参数:一个List对象和一个Function对象。Function对象用来提取List中每个元素的关键字。这个方法返回一个List对象,其中包含了所有不重复的元素。
我们使用了一个HashSet来记录已经出现过的关键字,如果HashSet中已经包含了某个关键字,就说明这个元素已经出现过,可以忽略。否则,就将这个元素加入到结果列表中,并将关键字加入到HashSet中。
使用这个方法的示例代码如下所示:
```
List<Person> people = new ArrayList<>();
people.add(new Person("Tom", 20));
people.add(new Person("Tom", 30));
people.add(new Person("Jerry", 25));
List<Person> uniquePeople = removeDuplicates(people, Person::getName);
System.out.println(uniquePeople); // 输出 [Person{name='Tom', age=20}, Person{name='Jerry', age=25}]
```
在这个示例代码中,我们定义了一个Person类,其中包含了两个属性:name和age。我们创建了一个包含三个Person对象的List,其中有两个Person对象的name属性相同,另一个不同。我们调用了removeDuplicates方法,并使用Person::getName作为Function对象,提取每个Person对象的name属性作为关键字。最终,这个方法返回了一个包含两个元素的List,其中不包含重复的Person对象。
阅读全文