diff --git a/CHANGELOG.md b/CHANGELOG.md index 0c93caad4..96ff2f7cb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ * 【core】 CollUtil增加filterNew等方法(原filter变更为filterNew,新增filter) * 【crypto】 Sign增加setParameter方法 * 【extra】 Sftp得put方法增加进度支持(issue#518@Github) +* 【core】 ArrayUtil增加distinct方法 ### Bug修复 diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java index aa0fa6158..9eb32e6af 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java @@ -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); } + + /** + * 去重数组中的元素,去重后生成新的数组,原数组不变
+ * 此方法通过{@link LinkedHashSet} 去重 + * + * @param array 数组 + * @return 去重后的数组 + */ + @SuppressWarnings("unchecked") + public static T[] distinct(T[] array) { + if(isEmpty(array)) { + return array; + } + + final Set set = new LinkedHashSet<>(array.length, 1); + for (T t : array) { + set.add(t); + } + return toArray(set, (Class)getComponentType(array)); + } } diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java index eade5fb69..fd4205397 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java @@ -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); + } }