From 844b05cc359761c2aec31cbadc88779798936ed3 Mon Sep 17 00:00:00 2001 From: kongweiguang Date: Mon, 3 Jul 2023 09:55:23 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0flat=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/hutool/core/collection/CollUtil.java | 15 +++++++++------ .../core/stream/TransformableWrappedStream.java | 11 ++++++----- .../stream/AbstractEnhancedWrappedStreamTest.java | 2 +- 3 files changed, 16 insertions(+), 12 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 fe8e6a768..387d6762e 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 @@ -2363,13 +2363,14 @@ public class CollUtil { * @param collection 需要解构的集合 * @return 解构后的集合 */ - public static List flat(Collection collection) { + public static List flat(Collection collection) { return flat(collection, true); } /** * 解构多层集合 - * 例如:List<List<List<String>>> 解构成 List<String> + * 例如:例如:{@code List>> 解构成 List} + *

* skipNull如果为true, 则解构后的集合里不包含null值,为false则会包含null值。 * * @param collection 需要结构的集合 @@ -2377,7 +2378,7 @@ public class CollUtil { * @return 解构后的集合 */ @SuppressWarnings({"unchecked"}) - public static List flat(Collection collection, boolean skipNull) { + public static List flat(Collection collection, boolean skipNull) { LinkedList queue = new LinkedList<>(collection); List result = new ArrayList<>(); @@ -2385,14 +2386,16 @@ public class CollUtil { while (!queue.isEmpty()) { Object t = queue.removeFirst(); + if (skipNull && t == null) { + continue; + } + if (t instanceof Collection) { queue.addAll((Collection) t); - } else if (skipNull && t == null) { - continue; } else { result.add(t); } } - return result; + return (List) result; } } diff --git a/hutool-core/src/main/java/org/dromara/hutool/core/stream/TransformableWrappedStream.java b/hutool-core/src/main/java/org/dromara/hutool/core/stream/TransformableWrappedStream.java index 2843f7303..718472d1c 100644 --- a/hutool-core/src/main/java/org/dromara/hutool/core/stream/TransformableWrappedStream.java +++ b/hutool-core/src/main/java/org/dromara/hutool/core/stream/TransformableWrappedStream.java @@ -489,14 +489,15 @@ public interface TransformableWrappedStream 函数执行后返回的类型 + * 例如:{@code List>> 解构成 List} + * + * @param 函数执行后返回的List里面的类型 * @return EasyStream 一个流 */ - default EasyStream flatObj(Class clazz) { - return EasyStream.of(CollUtil.flat(nonNull().collect(Collectors.toList()))).map(clazz::cast); + default EasyStream flat() { + return EasyStream.of(CollUtil.flat(nonNull().collect(Collectors.toList()))); } + // endregion // region ============ map ============ diff --git a/hutool-core/src/test/java/org/dromara/hutool/core/stream/AbstractEnhancedWrappedStreamTest.java b/hutool-core/src/test/java/org/dromara/hutool/core/stream/AbstractEnhancedWrappedStreamTest.java index 261b00dca..1c64f3299 100644 --- a/hutool-core/src/test/java/org/dromara/hutool/core/stream/AbstractEnhancedWrappedStreamTest.java +++ b/hutool-core/src/test/java/org/dromara/hutool/core/stream/AbstractEnhancedWrappedStreamTest.java @@ -723,7 +723,7 @@ public class AbstractEnhancedWrappedStreamTest { Arrays.asList("j", "k", "l") ) ); - List r = EasyStream.of(list).flatObj(String.class).toList(); + List r = EasyStream.of(list).flat().toList(); Assertions.assertArrayEquals(new String[]{"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"}, r.toArray()); }