list集合中是对象怎么根据对象的值去重
时间: 2023-07-18 08:48:19 浏览: 107
如果List集合中是对象,我们可以使用Java 8的Stream API来根据对象的值进行去重。具体做法是,使用distinct()方法来去重,并传入一个lambda表达式,该表达式根据对象的值来判断是否重复。
例如,假设我们有一个Person类,它有两个属性name和age,我们要根据name属性来对Person对象进行去重,可以使用以下代码:
```java
List<Person> personList = new ArrayList<>();
// 添加Person对象到List
...
List<Person> distinctList = personList.stream()
.filter(distinctByKey(Person::getName))
.collect(Collectors.toList());
// distinctByKey方法的实现
public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Set<Object> seen = ConcurrentHashMap.newKeySet();
return t -> seen.add(keyExtractor.apply(t));
}
```
上述代码中,distinctByKey方法返回一个Predicate对象,该对象根据keyExtractor函数提取对象的name属性,并使用ConcurrentHashMap来保存已经见过的name值,确保每个name值只会出现一次。然后在使用Stream的filter()方法来过滤重复的Person对象,最后使用collect()方法将结果转换成List。
需要注意的是,上述代码中要使用ConcurrentHashMap来保存已经见过的name值,因为在并发场景下,普通的HashSet或HashMap可能会出现线程安全问题。
阅读全文