diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/collection/CollUtil.java b/hutool-core/src/main/java/org/dromara/hutool/core/collection/CollUtil.java index 39a1e444d..fd067d2bd 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/collection/CollUtil.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/collection/CollUtil.java @@ -297,7 +297,7 @@ public class CollUtil { * @return 并集的集合,返回 {@link ArrayList} */ @SafeVarargs - public static Collection union(final Collection... colls) { + public static Collection union(final Collection... colls) { return CollectionOperation.of(colls).union(); } @@ -312,7 +312,7 @@ public class CollUtil { * @return 并集的集合,返回 {@link LinkedHashSet} */ @SafeVarargs - public static Set unionDistinct(final Collection... colls) { + public static Set unionDistinct(final Collection... colls) { return CollectionOperation.of(colls).unionDistinct(); } @@ -327,7 +327,7 @@ public class CollUtil { * @return 并集的集合,返回 {@link ArrayList} */ @SafeVarargs - public static List unionAll(final Collection... colls) { + public static List unionAll(final Collection... colls) { return CollectionOperation.of(colls).unionAll(); } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/collection/CollectionOperation.java b/hutool-core/src/main/java/org/dromara/hutool/core/collection/CollectionOperation.java index bb700e0f4..6e3faa75c 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/collection/CollectionOperation.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/collection/CollectionOperation.java @@ -45,7 +45,7 @@ public class CollectionOperation { * @return CollectionOperation */ @SafeVarargs - public static CollectionOperation of(final Collection... colls) { + public static CollectionOperation of(final Collection... colls) { return new CollectionOperation<>(colls); } @@ -56,8 +56,9 @@ public class CollectionOperation { * * @param colls 集合数组 */ - public CollectionOperation(final Collection[] colls) { - this.colls = colls; + @SuppressWarnings("unchecked") + public CollectionOperation(final Collection[] colls) { + this.colls = (Collection[]) colls; } /** diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/collection/CollUtilTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/collection/CollUtilTest.java index 8aebcef74..5e0a58bfe 100644 --- a/hutool-core/src/test/java/org/dromara/hutool/core/collection/CollUtilTest.java +++ b/hutool-core/src/test/java/org/dromara/hutool/core/collection/CollUtilTest.java @@ -1110,6 +1110,26 @@ public class CollUtilTest { } } + @ToString(callSuper = true) + @EqualsAndHashCode(callSuper = true) + @Data + static class Cat extends Animal { + + public Cat(String name, Integer age) { + super(name, age); + } + } + + @ToString(callSuper = true) + @EqualsAndHashCode(callSuper = true) + @Data + static class Pig extends Animal { + + public Pig(String name, Integer age) { + super(name, age); + } + } + @Test public void getFirstTest() { Assertions.assertNull(CollUtil.getFirst(null)); @@ -1181,4 +1201,27 @@ public class CollUtilTest { public void minNullTest() { Assertions.assertNull(CollUtil.max(null)); } + + @Test + public void unionExtendTest() { + List dog = Arrays.asList(new Dog("dog1", 12), new Dog("dog2", 12)); + List cat = Arrays.asList(new Cat("cat1", 12), new Cat("cat2", 12)); + Assertions.assertEquals(CollUtil.union(dog, cat).size(), dog.size() + cat.size()); + } + + @Test + public void unionAllExtendTest() { + List dog = Arrays.asList(new Dog("dog1", 12), new Dog("dog2", 12)); + List cat = Arrays.asList(new Cat("cat1", 12), new Cat("cat2", 12)); + List pig = Arrays.asList(new Pig("pig1", 12), new Pig("pig2", 12)); + Assertions.assertEquals(CollUtil.unionAll(dog, cat, pig).size(), dog.size() + cat.size() + pig.size()); + } + + @Test + public void unionDistinctExtendTest() { + List dog = Arrays.asList(new Dog("dog1", 12), new Dog("dog1", 12)); // same + List cat = Arrays.asList(new Cat("cat1", 12), new Cat("cat2", 12)); + List pig = Arrays.asList(new Pig("pig1", 12), new Pig("pig2", 12)); + Assertions.assertEquals(CollUtil.unionDistinct(dog, cat, pig).size(), 5); + } }