Browse Source

add size method

Looly 5 years ago
parent
commit
af118cd953

+ 1 - 0
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)

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

+ 7 - 3
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;