/**
* 通过对象属性去重
*
* @param keyExtractor
* @param <T>
* @return
*/
public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Set<Object> seen = ConcurrentHashMap.newKeySet();
return t -> seen.add(keyExtractor.apply(t));
}
/**
* 通过对象属性去重,并对相同Key的对象执行操作,适合两个list相同属性并集
*
* @param keyExtractor
* @param thenFunction
* @param <T>
* @return
*/
public static <T> Predicate<T> distinctAndThen(Function<? super T, Object> keyExtractor,
BiConsumer<T, T> thenFunction) {
Map<Object, T> map = new ConcurrentHashMap<>(10);
return t -> {
if (map.containsKey(keyExtractor.apply(t))) {
thenFunction.accept(t, map.get(keyExtractor.apply(t)));
return false;
} else {
map.put(keyExtractor.apply(t), t);
return true;
}
};
}
原文:https://www.cnblogs.com/Mr-GG/p/java8-qu-zhong-shu-xing-zeng-qiang.html