在使用java8的stream流对List集合操作时,遇到了去重问题。原有的distinct()方法需要重写对象的equals()和hashCode()方法,比较麻烦,而且写在实体里比较难看。于是查阅资料,写了如下代码:
List<User> users = Lists.newArrayList(new User("aa",11),new User("bb",13),new User("aa",14) );
List<User> collect = users.stream().filter(distinctByKey(User::getName)).collect(Collectors.toList());
System.out.println(collect);
//去重函数
public <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
Set<Object> set = ConcurrentHashMap.newKeySet();
System.out.println("----------");
return t -> set.add(keyExtractor.apply(t));
}
运行结果:
----------
[User(name=aa, age=11), User(name=bb, age=13)]