diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ee45055a..9c8267313 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,7 @@ * 【http 】 HttpUtil增加downloadBytes方法(pr#895@Github) * 【core 】 isMactchRegex失效标记,增加isMatchRegex(issue#I1IPJG@Gitee) * 【core 】 优化Validator.isChinese +* 【core 】 ArrayUtil.addAll增加原始类型支持(issue#898@Github) ### Bug修复 * 【core 】 修复SimpleCache死锁问题(issue#I1HOKB@Gitee) diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java index 57422dd04..73372894f 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ArrayUtil.java @@ -654,6 +654,230 @@ public class ArrayUtil { return result; } + /** + * 将多个数组合并在一起
+ * 忽略null的数组 + * + * @param arrays 数组集合 + * @return 合并后的数组 + * @since 4.6.9 + */ + public static int[] addAll(int[]... arrays) { + if (arrays.length == 1) { + return arrays[0]; + } + + // 计算总长度 + int length = 0; + for (int[] array : arrays) { + if (null != array) { + length += array.length; + } + } + + final int[] result = new int[length]; + length = 0; + for (int[] array : arrays) { + if (null != array) { + System.arraycopy(array, 0, result, length, array.length); + length += array.length; + } + } + return result; + } + + /** + * 将多个数组合并在一起
+ * 忽略null的数组 + * + * @param arrays 数组集合 + * @return 合并后的数组 + * @since 4.6.9 + */ + public static long[] addAll(long[]... arrays) { + if (arrays.length == 1) { + return arrays[0]; + } + + // 计算总长度 + int length = 0; + for (long[] array : arrays) { + if (null != array) { + length += array.length; + } + } + + final long[] result = new long[length]; + length = 0; + for (long[] array : arrays) { + if (null != array) { + System.arraycopy(array, 0, result, length, array.length); + length += array.length; + } + } + return result; + } + + /** + * 将多个数组合并在一起
+ * 忽略null的数组 + * + * @param arrays 数组集合 + * @return 合并后的数组 + * @since 4.6.9 + */ + public static double[] addAll(double[]... arrays) { + if (arrays.length == 1) { + return arrays[0]; + } + + // 计算总长度 + int length = 0; + for (double[] array : arrays) { + if (null != array) { + length += array.length; + } + } + + final double[] result = new double[length]; + length = 0; + for (double[] array : arrays) { + if (null != array) { + System.arraycopy(array, 0, result, length, array.length); + length += array.length; + } + } + return result; + } + + /** + * 将多个数组合并在一起
+ * 忽略null的数组 + * + * @param arrays 数组集合 + * @return 合并后的数组 + * @since 4.6.9 + */ + public static float[] addAll(float[]... arrays) { + if (arrays.length == 1) { + return arrays[0]; + } + + // 计算总长度 + int length = 0; + for (float[] array : arrays) { + if (null != array) { + length += array.length; + } + } + + final float[] result = new float[length]; + length = 0; + for (float[] array : arrays) { + if (null != array) { + System.arraycopy(array, 0, result, length, array.length); + length += array.length; + } + } + return result; + } + + /** + * 将多个数组合并在一起
+ * 忽略null的数组 + * + * @param arrays 数组集合 + * @return 合并后的数组 + * @since 4.6.9 + */ + public static char[] addAll(char[]... arrays) { + if (arrays.length == 1) { + return arrays[0]; + } + + // 计算总长度 + int length = 0; + for (char[] array : arrays) { + if (null != array) { + length += array.length; + } + } + + final char[] result = new char[length]; + length = 0; + for (char[] array : arrays) { + if (null != array) { + System.arraycopy(array, 0, result, length, array.length); + length += array.length; + } + } + return result; + } + + /** + * 将多个数组合并在一起
+ * 忽略null的数组 + * + * @param arrays 数组集合 + * @return 合并后的数组 + * @since 4.6.9 + */ + public static boolean[] addAll(boolean[]... arrays) { + if (arrays.length == 1) { + return arrays[0]; + } + + // 计算总长度 + int length = 0; + for (boolean[] array : arrays) { + if (null != array) { + length += array.length; + } + } + + final boolean[] result = new boolean[length]; + length = 0; + for (boolean[] array : arrays) { + if (null != array) { + System.arraycopy(array, 0, result, length, array.length); + length += array.length; + } + } + return result; + } + + /** + * 将多个数组合并在一起
+ * 忽略null的数组 + * + * @param arrays 数组集合 + * @return 合并后的数组 + * @since 4.6.9 + */ + public static short[] addAll(short[]... arrays) { + if (arrays.length == 1) { + return arrays[0]; + } + + // 计算总长度 + int length = 0; + for (short[] array : arrays) { + if (null != array) { + length += array.length; + } + } + + final short[] result = new short[length]; + length = 0; + for (short[] array : arrays) { + if (null != array) { + System.arraycopy(array, 0, result, length, array.length); + length += array.length; + } + } + return result; + } + /** * 包装 {@link System#arraycopy(Object, int, Object, int, int)}
* 数组复制 diff --git a/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java index 0f41afde3..e9df98f16 100644 --- a/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/util/ArrayUtilTest.java @@ -283,4 +283,10 @@ public class ArrayUtilTest { Assert.assertEquals("C", array[2]); Assert.assertEquals("D", array[3]); } + + @Test + public void addAllTest(){ + final int[] ints = ArrayUtil.addAll(new int[]{1, 2, 3}, new int[]{4, 5, 6}); + Assert.assertArrayEquals(new int[]{1,2,3,4,5,6}, ints); + } }