目标数组类型
* @param src 源数组
@@ -662,7 +689,8 @@ public class ArrayUtil extends PrimitiveArrayUtil {
if (isArray(obj)) {
final Object result;
final Class> componentType = obj.getClass().getComponentType();
- if (componentType.isPrimitive()) {// 原始类型
+ // 原始类型
+ if (componentType.isPrimitive()) {
int length = Array.getLength(obj);
result = Array.newInstance(componentType, length);
while (length-- > 0) {
@@ -677,27 +705,25 @@ public class ArrayUtil extends PrimitiveArrayUtil {
}
/**
- * 编辑数组
- * 编辑过程通过传入的Editor实现来返回需要的元素内容,这个Editor实现可以实现以下功能:
- *
- *
- * 1、过滤出需要的对象,如果返回{@code null}表示这个元素对象抛弃
- * 2、修改元素对象,返回集合中为修改后的对象
- *
- *
+ * 对每个数组元素执行指定操作,返回操作后的元素
+ * 这个Editor实现可以实现以下功能:
+ *
+ * - 过滤出需要的对象,如果返回{@code null}则抛弃这个元素对象
+ * - 修改元素对象,返回修改后的对象
+ *
*
* @param 数组元素类型
* @param array 数组
- * @param editor 编辑器接口,{@code null}返回原集合
+ * @param editor 编辑器接口,为 {@code null}则返回原数组
* @return 编辑后的数组
* @since 5.3.3
*/
public static T[] edit(final T[] array, final UnaryOperator editor) {
- if (null == editor) {
+ if (null == array || null == editor) {
return array;
}
- final ArrayList list = new ArrayList<>(array.length);
+ final List list = new ArrayList<>(array.length);
T modified;
for (final T t : array) {
modified = editor.apply(t);
@@ -710,16 +736,12 @@ public class ArrayUtil extends PrimitiveArrayUtil {
}
/**
- * 过滤
- * 过滤过程通过传入的Filter实现来过滤返回需要的元素内容,这个Filter实现可以实现以下功能:
- *
- *
- * 1、过滤出需要的对象,{@link Predicate#test(Object)}为{@code true}对象将被加入结果集合中
- *
+ * 过滤数组元素
+ * 保留 {@link Predicate#test(Object)}为{@code true}的元素
*
* @param 数组元素类型
* @param array 数组
- * @param predicate 过滤器接口,用于定义过滤规则,{@link Predicate#test(Object)}为{@code true}保留,{@code null}返回原集合
+ * @param predicate 过滤器接口,用于定义过滤规则,为{@code null}则返回原数组
* @return 过滤后的数组
* @since 3.2.1
*/
@@ -731,7 +753,7 @@ public class ArrayUtil extends PrimitiveArrayUtil {
}
/**
- * 去除{@code null} 元素
+ * 去除 {@code null} 元素
*
* @param 数组元素类型
* @param array 数组
@@ -739,10 +761,8 @@ public class ArrayUtil extends PrimitiveArrayUtil {
* @since 3.2.2
*/
public static T[] removeNull(final T[] array) {
- return edit(array, t -> {
- // 返回null便不加入集合
- return t;
- });
+ // 返回元素本身,如果为null便自动过滤
+ return edit(array, UnaryOperator.identity());
}
/**
@@ -773,7 +793,7 @@ public class ArrayUtil extends PrimitiveArrayUtil {
* 数组元素中的null转换为""
*
* @param array 数组
- * @return 新数组
+ * @return 处理后的数组
* @since 3.2.1
*/
public static String[] nullToEmpty(final String[] array) {
@@ -792,13 +812,13 @@ public class ArrayUtil extends PrimitiveArrayUtil {
* @param Value类型
* @param keys 键列表
* @param values 值列表
- * @param isOrder 是否有序
+ * @param isOrder Map中的元素是否保留键值数组本身的顺序
* @return Map
* @since 3.0.4
*/
public static Map zip(final K[] keys, final V[] values, final boolean isOrder) {
if (isEmpty(keys) || isEmpty(values)) {
- return null;
+ return MapUtil.newHashMap(0, isOrder);
}
final int size = Math.min(keys.length, values.length);
@@ -866,7 +886,7 @@ public class ArrayUtil extends PrimitiveArrayUtil {
* @since 3.1.2
*/
public static int indexOfIgnoreCase(final CharSequence[] array, final CharSequence value) {
- if (null != array) {
+ if (isNotEmpty(array)) {
for (int i = 0; i < array.length; i++) {
if (StrUtil.equalsIgnoreCase(array[i], value)) {
return i;
@@ -877,12 +897,12 @@ public class ArrayUtil extends PrimitiveArrayUtil {
}
/**
- * 返回数组中指定元素所在最后的位置,未找到返回{@link #INDEX_NOT_FOUND}
+ * 返回数组中指定元素最后的所在位置,未找到返回{@link #INDEX_NOT_FOUND}
*
* @param 数组类型
* @param array 数组
* @param value 被检查的元素
- * @return 数组中指定元素所在位置,未找到返回{@link #INDEX_NOT_FOUND}
+ * @return 数组中指定元素最后的所在位置,未找到返回{@link #INDEX_NOT_FOUND}
* @since 3.0.7
*/
public static int lastIndexOf(final T[] array, final Object value) {
@@ -893,13 +913,13 @@ public class ArrayUtil extends PrimitiveArrayUtil {
}
/**
- * 返回数组中指定元素所在最后的位置,未找到返回{@link #INDEX_NOT_FOUND}
+ * 返回数组中指定元素最后的所在位置,未找到返回{@link #INDEX_NOT_FOUND}
*
* @param 数组类型
* @param array 数组
* @param value 被检查的元素
- * @param endInclude 查找方式为从后向前查找,查找的数组结束位置,一般为array.length-1
- * @return 数组中指定元素所在位置,未找到返回{@link #INDEX_NOT_FOUND}
+ * @param endInclude 从后向前查找时的起始位置,一般为{@code array.length - 1}
+ * @return 数组中指定元素最后的所在位置,未找到返回{@link #INDEX_NOT_FOUND}
* @since 5.7.3
*/
public static int lastIndexOf(final T[] array, final Object value, final int endInclude) {
@@ -914,7 +934,7 @@ public class ArrayUtil extends PrimitiveArrayUtil {
}
/**
- * 数组中是否包含元素
+ * 数组中是否包含指定元素
*
* @param 数组元素类型
* @param array 数组
@@ -945,12 +965,12 @@ public class ArrayUtil extends PrimitiveArrayUtil {
}
/**
- * 数组中是否包含指定元素中的全部
+ * 数组中是否包含所有指定元素
*
* @param 数组元素类型
* @param array 数组
* @param values 被检查的多个元素
- * @return 是否包含指定元素中的全部
+ * @return 是否包含所有指定元素
* @since 5.4.7
*/
@SuppressWarnings("unchecked")
@@ -990,8 +1010,6 @@ public class ArrayUtil extends PrimitiveArrayUtil {
}
if (isArray(obj)) {
try {
- return (Object[]) obj;
- } catch (final Exception e) {
final String className = obj.getClass().getComponentType().getName();
switch (className) {
case "long":
@@ -1011,8 +1029,10 @@ public class ArrayUtil extends PrimitiveArrayUtil {
case "double":
return wrap((double[]) obj);
default:
- throw new UtilException(e);
+ return (Object[]) obj;
}
+ } catch (final Exception e) {
+ throw new UtilException(e);
}
}
throw new UtilException(StrUtil.format("[{}] is not Array!", obj.getClass()));
@@ -1054,12 +1074,12 @@ public class ArrayUtil extends PrimitiveArrayUtil {
}
/**
- * 获取数组中指定多个下标元素值,组成新数组
+ * 获取数组中所有指定位置的元素值,组成新数组
*
* @param 数组元素类型
* @param array 数组,如果提供为{@code null}则返回{@code null}
* @param indexes 下标列表
- * @return 结果
+ * @return 指定位置的元素值数组
*/
public static T[] getAny(final Object array, final int... indexes) {
if (null == array) {
@@ -1095,18 +1115,15 @@ public class ArrayUtil extends PrimitiveArrayUtil {
if (end < 0) {
end += length;
}
- if (start == length) {
- return newArray(array.getClass().getComponentType(), 0);
- }
if (start > end) {
final int tmp = start;
start = end;
end = tmp;
}
+ if (start >= length) {
+ return newArray(array.getClass().getComponentType(), 0);
+ }
if (end > length) {
- if (start >= length) {
- return newArray(array.getClass().getComponentType(), 0);
- }
end = length;
}
return Arrays.copyOfRange(array, start, end);
@@ -1143,18 +1160,15 @@ public class ArrayUtil extends PrimitiveArrayUtil {
if (end < 0) {
end += length;
}
- if (start == length) {
- return new Object[0];
- }
if (start > end) {
final int tmp = start;
start = end;
end = tmp;
}
+ if (start >= length) {
+ return new Object[0];
+ }
if (end > length) {
- if (start >= length) {
- return new Object[0];
- }
end = length;
}
@@ -1162,7 +1176,7 @@ public class ArrayUtil extends PrimitiveArrayUtil {
step = 1;
}
- final ArrayList