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的大小
- *
- * 此方法可以处理的对象类型如下
- *
- * - Collection - the collection size
- *
- Map - the map size
- *
- Array - the array size
- *
- Iterator - the number of elements remaining in the iterator
- *
- Enumeration - the number of elements remaining in the enumeration
- *
- *
- * @param object 可以为空的对象
- * @return 如果object为空则返回0
- * @throws IllegalArgumentException 参数object不是Collection或者iterator
- * @since 5.4.8
- */
- public static int size(final Object object) {
+ /**
+ * 获取Collection或者iterator的大小,此方法可以处理的对象类型如下:
+ *
+ * - Collection - the collection size
+ *
- Map - the map size
+ *
- Array - the array size
+ *
- Iterator - the number of elements remaining in the iterator
+ *
- Enumeration - the number of elements remaining in the enumeration
+ *
+ *
+ * @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;