add ArrayUtil.distict

This commit is contained in:
Looly 2019-09-02 18:01:15 +08:00
parent 870e22de00
commit 5e4718c8ce
3 changed files with 30 additions and 0 deletions

View File

@ -9,6 +9,7 @@
* 【core】 CollUtil增加filterNew等方法原filter变更为filterNew新增filter
* 【crypto】 Sign增加setParameter方法
* 【extra】 Sftp得put方法增加进度支持issue#518@Github
* 【core】 ArrayUtil增加distinct方法
### Bug修复

View File

@ -6,7 +6,9 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.collection.IterUtil;
@ -3827,4 +3829,24 @@ public class ArrayUtil {
public static boolean isAllNotEmpty(Object... args) {
return false == hasEmpty(args);
}
/**
* 去重数组中的元素去重后生成新的数组原数组不变<br>
* 此方法通过{@link LinkedHashSet} 去重
*
* @param array 数组
* @return 去重后的数组
*/
@SuppressWarnings("unchecked")
public static <T> T[] distinct(T[] array) {
if(isEmpty(array)) {
return array;
}
final Set<T> set = new LinkedHashSet<>(array.length, 1);
for (T t : array) {
set.add(t);
}
return toArray(set, (Class<T>)getComponentType(array));
}
}

View File

@ -225,4 +225,11 @@ public class ArrayUtilTest {
arrayType = ArrayUtil.getArrayType(String.class);
Assert.assertEquals(String[].class, arrayType);
}
@Test
public void distinctTest() {
String[] array = {"aa", "bb", "cc", "dd", "bb", "dd"};
String[] distinct = ArrayUtil.distinct(array);
Assert.assertArrayEquals(new String[] {"aa", "bb", "cc", "dd"}, distinct);
}
}