java List<对象>根据属性去重
时间: 2024-05-11 10:16:11 浏览: 6
你可以使用Java的Stream API和Lambda表达式来实现根据属性去重。具体实现可以参考以下代码:
```
public List<Object> removeDuplicates(List<Object> list, String propertyName) {
return list.stream().filter(
distinctByKey(obj -> {
try {
Field field = obj.getClass().getDeclaredField(propertyName);
field.setAccessible(true);
return field.get(obj);
} catch (Exception e) {
return null;
}
})
).collect(Collectors.toList());
}
private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
```
其中,removeDuplicates方法使用Stream API和Lambda表达式实现根据属性去重。distinctByKey方法返回一个Predicate,用于判断一个对象是否已经出现过。代码中使用ConcurrentHashMap来记录已经出现过的属性值,避免出现线程安全问题。