单个list 根据某几个属性去重
/**
* 过滤同一个List<Bean>数据的策略
*
* @param function
* @param <T>
* @return
*/
public static <T, R> Predicate<T> distinctByKey(Function<? super T, R> function) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(function.apply(t), Boolean.TRUE) == null;
}
list<bean> 使用java8根据某几个属性去重复:使用链接
两个list 根据某几个属性去重
/**
* 过滤两个list<Bean>数据的策略(bean对象可以不同)
*
* @param otherList 被比较的List<bean>
* @param otherFunction 被比较的Function(目的是为了组装key)
* @param thisFunction 调用此方法方的Function(目的是为了组装key)
* @return
*/
public static <E, M, V> Predicate<E> distinctByOtherList(List<M> otherList, Function<M, V> otherFunction, Function<E, V> thisFunction) {
Set<V> otherKeySet = otherList.stream().map(otherFunction).collect(Collectors.toSet());
return e -> Boolean.TRUE.equals(otherKeySet.contains(thisFunction.apply(e)));
}