java8根据id去重
时间: 2023-07-08 22:52:23 浏览: 143
可以使用Java 8的Stream API和lambda表达式来根据ID去重。假设我们有一个包含对象的List,每个对象都有一个唯一的ID属性,那么我们可以使用以下代码来去重:
```
List<Object> list = ... // 待去重的列表
List<Object> distinctList = list.stream()
.filter(distinctByKey(obj -> obj.getId()))
.collect(Collectors.toList());
// 定义distinctByKey方法
public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
```
在上面的代码中,我们使用了`distinctByKey`方法来定义一个Predicate,它将根据对象的ID属性来去重。`distinctByKey`方法内部使用了Java 8的ConcurrentHashMap来保证线程安全。
注意,如果我们使用的是自定义的对象而不是Java的内置类型,需要正确实现hashCode和equals方法。
阅读全文