From 626691adecbb8d86391d1f32c6bf5f56b52d8c93 Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 5 Mar 2021 19:13:20 +0800 Subject: [PATCH] =?UTF-8?q?add=20isEqualList=E6=96=B9=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 1 + .../cn/hutool/core/collection/CollUtil.java | 21 ++++++++++ .../cn/hutool/core/collection/IterUtil.java | 38 ++++++++++++++++++- 3 files changed, 59 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9decc9000..4c888ca19 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ ### 新特性 * 【poi 】 重要:不再兼容POI-3.x,增加兼容POI-5.x(issue#I35J6B@Gitee) * 【core 】 FileTypeUtil使用长匹配优先(pr#1457@Github) +* 【core 】 IterUtil和CollUtil增加isEqualList方法(issue#I3A3PY@Gitee) ### Bug修复 * 【socket 】 修复Client创建失败资源未释放问题。 diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java index 9c8819f22..927ecb69e 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/CollUtil.java @@ -2988,4 +2988,25 @@ public class CollUtil { } return total; } + + /** + * 判断两个{@link Collection} 是否元素和顺序相同,返回{@code true}的条件是: + * + * 此方法来自Apache-Commons-Collections4。 + * + * @param list1 列表1 + * @param list2 列表2 + * @return 是否相同 + * @since 5.6.0 + */ + public static boolean isEqualList(final Collection list1, final Collection list2) { + if (list1 == null || list2 == null || list1.size() != list2.size()) { + return false; + } + + return IterUtil.isEqualList(list1, list2); + } } diff --git a/hutool-core/src/main/java/cn/hutool/core/collection/IterUtil.java b/hutool-core/src/main/java/cn/hutool/core/collection/IterUtil.java index 931af5f44..ad41f8699 100644 --- a/hutool-core/src/main/java/cn/hutool/core/collection/IterUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/collection/IterUtil.java @@ -18,6 +18,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Objects; import java.util.function.Function; /** @@ -612,7 +613,7 @@ public class IterUtil { /** * Enumeration转换为Iterator *

- * Adapt the specified Enumeration to the Iterator interface + * Adapt the specified {@code Enumeration} to the {@code Iterator} interface * * @param 集合元素类型 * @param e {@link Enumeration} @@ -859,4 +860,39 @@ public class IterUtil { } return size; } + + /** + * 判断两个{@link Iterable} 是否元素和顺序相同,返回{@code true}的条件是: + *

+ * 此方法来自Apache-Commons-Collections4。 + * + * @param list1 列表1 + * @param list2 列表2 + * @return 是否相同 + * @since 5.6.0 + */ + public static boolean isEqualList(final Iterable list1, final Iterable list2) { + if (list1 == list2) { + return true; + } + + final Iterator it1 = list1.iterator(); + final Iterator it2 = list2.iterator(); + Object obj1; + Object obj2; + while (it1.hasNext() && it2.hasNext()) { + obj1 = it1.next(); + obj2 = it2.next(); + + if (false == Objects.equals(obj1, obj2)) { + return false; + } + } + + // 当两个Iterable长度不一致时返回false + return false == (it1.hasNext() || it2.hasNext()); + } }