From 8c50bc829cf9fb16ea16fa1638dd19139b1eadca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=95=A2=E6=95=A2?= Date: Tue, 27 Jun 2023 15:42:33 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9CollUtil.union=E7=AD=89?= =?UTF-8?q?=E6=96=B9=E6=B3=95=E6=B3=9B=E5=9E=8B=EF=BC=8C=E4=BD=BF=E5=85=B6?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=9A=E7=A7=8D=E5=AD=90=E7=B1=BBunion?= =?UTF-8?q?=E4=B8=80=E4=B8=AA=E7=88=B6=E7=B1=BB=E9=9B=86=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../hutool/core/collection/CollUtil.java | 6 +-- .../core/collection/CollectionOperation.java | 7 +-- .../hutool/core/collection/CollUtilTest.java | 43 +++++++++++++++++++ 3 files changed, 50 insertions(+), 6 deletions(-) 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); + } }