v0.0.6
All checks were successful
CI/CD / build-deploy (pull_request) Successful in 24s

This commit is contained in:
Timi
2026-05-22 19:15:28 +08:00
parent ab95d52c75
commit 65929ae6f2
5 changed files with 259 additions and 1 deletions

View File

@@ -8,11 +8,13 @@ import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.BitSet;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -352,4 +354,60 @@ public class Collect {
return result;
}
/**
* 移除数组中的 null 和重复元素
*
* @param items 源数组
* @param <T> 数组数据类型
* @return 非 null、去重结果数组
*/
@SafeVarargs
@SuppressWarnings("unchecked")
public static <T> T[] distinctNonNull(T... items) {
if (items == null) {
return null;
}
LinkedHashSet<T> resultSet = distinctNonNullSet(Arrays.asList(items), items.length);
T[] result = (T[]) Array.newInstance(items.getClass().getComponentType(), resultSet.size());
return resultSet.toArray(result);
}
/**
* 移除集合中的 null 和重复元素
*
* @param set 源集合
* @param <T> 集合数据类型
* @return 非 null、去重结果集合
*/
public static <T> Set<T> distinctNonNull(Set<T> set) {
if (set == null) {
return null;
}
return distinctNonNullSet(set, set.size());
}
/**
* 移除列表中的 null 和重复元素
*
* @param list 源列表
* @param <T> 列表数据类型
* @return 非 null、去重结果列表
*/
public static <T> List<T> distinctNonNull(List<T> list) {
if (list == null) {
return null;
}
return new ArrayList<>(distinctNonNullSet(list, list.size()));
}
private static <T> LinkedHashSet<T> distinctNonNullSet(Iterable<T> items, int size) {
LinkedHashSet<T> result = new LinkedHashSet<>(size);
for (T item : items) {
if (item != null) {
result.add(item);
}
}
return result;
}
}