调用示例:
@Param - source : 待校验参数,
@Param - filed : 指定属性 , (语法糖-方法引用)
findDuplicates()
/**
* 检查列表中是否存在重复的属性值,并返回重复的属性值列表。
*
* @since 1.0.0
* @author wither
*
* @param items 待检查的元素列表。
* @param keyExtractor 提取每个元素中用于检查重复的属性的函数。
* @param <T> 列表元素的类型。
* @param <K> 用于检查重复的属性的类型。
* @return 包含所有重复属性值的列表,如果没有重复则返回空列表。
*
* @see java.util.function.Function
* @sample 调用演示: List<String> duplicateSourceCodes = DuplicateChecker.findDuplicates(trucks, Truck::getSourceCode);
*/
public static <T, K> List<K> findDuplicates(List<T> items, java.util.function.Function<T, K> keyExtractor) {
Set<K> seen = new HashSet<>();
List<K> duplicates = new ArrayList<>();
for (T item : items) {
K key = keyExtractor.apply(item);
if (!seen.add(key)) {
// 利用 set特性校验是否存在重复
if (!duplicates.contains(key)) {
// 加入重复返回对象
duplicates.add(key);
}
}
}
return duplicates;
}