diff --git a/CHANGELOG.md b/CHANGELOG.md index b67dbbce0..d6a882a93 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -16,6 +16,7 @@ * 【extra 】 增加表达式引擎封装(ExpressionUtil)(pr#1203@Github) * 【core 】 增加enum转数字支持(issue#I24QZY@Gitee) * 【core 】 NumberUtil.toBigDecimal空白符转换为0(issue#I24MRP@Gitee) +* 【core 】 CollUtil和IterUtil增加size方法(pr#208@Gitee) ### Bug修复 * 【core 】 修复DateUtil.current使用System.nanoTime的问题(issue#1198@Github) 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 99b80a977..b56c239bd 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 @@ -21,7 +21,6 @@ import cn.hutool.core.util.ReflectUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.TypeUtil; -import java.lang.reflect.Array; import java.lang.reflect.Type; import java.util.AbstractCollection; import java.util.ArrayList; @@ -1384,7 +1383,7 @@ public class CollUtil { R value; for (T t : collection) { - if(null == t && ignoreNull){ + if (null == t && ignoreNull) { continue; } value = func.apply(t); @@ -2932,36 +2931,33 @@ public class CollUtil { } // ---------------------------------------------------------------------------------------------- Interface end - /** - * 获取Collection或者iterator的大小 - *

- * 此方法可以处理的对象类型如下 - *

- * - * @param object 可以为空的对象 - * @return 如果object为空则返回0 - * @throws IllegalArgumentException 参数object不是Collection或者iterator - * @since 5.4.8 - */ - public static int size(final Object object) { + /** + * 获取Collection或者iterator的大小,此方法可以处理的对象类型如下: + * + * + * @param object 可以为空的对象 + * @return 如果object为空则返回0 + * @throws IllegalArgumentException 参数object不是Collection或者iterator + * @since 5.5.0 + */ + public static int size(final Object object) { if (object == null) { return 0; } + int total = 0; - if (object instanceof Map) { + if (object instanceof Map) { total = ((Map) object).size(); } else if (object instanceof Collection) { total = ((Collection) object).size(); } else if (object instanceof Iterable) { total = IterUtil.size((Iterable) object); - } else if (object instanceof Object[]) { - total = ((Object[]) object).length; } else if (object instanceof Iterator) { total = IterUtil.size((Iterator) object); } else if (object instanceof Enumeration) { @@ -2970,13 +2966,11 @@ public class CollUtil { total++; it.nextElement(); } + } else if (ArrayUtil.isArray(object)) { + total = ArrayUtil.length(object); } else { - try { - total = Array.getLength(object); - } catch (IllegalArgumentException e) { - throw new IllegalArgumentException("Unsupported object type: " + object.getClass().getName()); - } + throw new IllegalArgumentException("Unsupported object type: " + object.getClass().getName()); } return total; - } + } } 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 b54718e55..afe74433d 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 @@ -828,13 +828,17 @@ public class IterUtil { * * @param iterable Iterable对象 * @return Iterable对象的元素数量 - * @since 5.4.8 + * @since 5.5.0 */ public static int size(final Iterable iterable) { + if(null == iterable){ + return 0; + } + if (iterable instanceof Collection) { return ((Collection) iterable).size(); } else { - return size(iterable != null ? iterable.iterator() : empty()); + return size(iterable.iterator()); } } @@ -843,7 +847,7 @@ public class IterUtil { * * @param iterator Iterator对象 * @return Iterator对象的元素数量 - * @since 5.4.8 + * @since 5.5.0 */ public static int size(final Iterator iterator) { int size = 0;