This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
44
src/test/java/test/TestCollect.java
Normal file
44
src/test/java/test/TestCollect.java
Normal file
@@ -0,0 +1,44 @@
|
||||
package test;
|
||||
|
||||
import com.imyeyu.utils.Collect;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
|
||||
/**
|
||||
* @author 夜雨
|
||||
* @since 2026-05-22 15:20
|
||||
*/
|
||||
public class TestCollect {
|
||||
|
||||
@Test
|
||||
public void testDistinctNonNullArray() {
|
||||
String[] result = Collect.distinctNonNull("a", null, "b", "a", null, "c", "b");
|
||||
|
||||
assertArrayEquals(new String[]{"a", "b", "c"}, result);
|
||||
assertNull(Collect.distinctNonNull((String[]) null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDistinctNonNullSet() {
|
||||
Set<String> source = new LinkedHashSet<>(Arrays.asList("a", null, "b", "c"));
|
||||
|
||||
assertEquals(new LinkedHashSet<>(Arrays.asList("a", "b", "c")), Collect.distinctNonNull(source));
|
||||
assertNull(Collect.distinctNonNull((Set<String>) null));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDistinctNonNullList() {
|
||||
List<String> source = Arrays.asList("a", null, "b", "a", null, "c", "b");
|
||||
|
||||
assertEquals(Arrays.asList("a", "b", "c"), Collect.distinctNonNull(source));
|
||||
assertNull(Collect.distinctNonNull((List<String>) null));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user