将多个元素添加到数组中,或者将两个数组合并,使用org.apache.commons.lang3提供的ArrayUtils即可
private static String[] concat(String[] first, String[] second) {
return ArrayUtils.addAll(first, second);
}
查看源码入参为一个数组和可变长度的数组元素。
天真的我看了项目之前对该方法对使用和入参是可变长度,然后就直接加了一个数组在方法里:
@Test
public void tt(){
String[] aa = {"1"};
String[] bb = {"1"};
String[] cc = {"1"};
ArrayUtils.addAll(aa,bb,cc);
}
结果就出问题了:
原因分析:
回头再看方法入参,这个方法原本要做的事情应该是将多个元素增加到目标数组中,返回新的数组。而不是用于两个数组的合并,至于开始为什么能实现两个数组合并的效果,个人目前理解为,第二个可变长度参数,其实就是一个数组对象,所以我们直接传入两个数组,该方法也没有报错。当传入数组大于2时,可变参数数组会变为二维数组,而该方法内部的System.copy()方法应该只适用于一维数组,因此会报错。
解决办法
所以,只能自己改一改了
public static <T> T[] arrayConcat(T[] array1, T[]... array2){
switch (array2.length){
case 0:
break;
default:
for (T t[] : array2) {
array1 = ArrayUtils.addAll(array1, t);
}
break;
}
return array1;
}
测试示例
@Test
public void tt(){
String[] aa = {"1"};
String[] bb = {"2","3"};
String[] cc = {"4"};
System.out.println(JSON.toJSONString(Arrays.asList(arrayConcat(aa))));
System.out.println(JSON.toJSONString(Arrays.asList(arrayConcat(aa,bb))));
System.out.println(JSON.toJSONString(Arrays.asList(arrayConcat(aa,bb,cc))));
UserInfo u1 = new UserInfo();
UserInfo u2 = new UserInfo();
UserInfo u3 = new UserInfo();
u1.setName("1");
u1.setPhone("18740461921");
u2.setName("2");
u2.setPhone("18740461922");
u3.setName("3");
u3.setPhone("18740461923");
UserInfo[] dd = {u1};
UserInfo[] ee = {u2};
UserInfo[] ff = {u3};
System.out.println(JSON.toJSONString(Arrays.asList(arrayConcat(dd))));
System.out.println(JSON.toJSONString(Arrays.asList(arrayConcat(dd,ee))));
System.out.println(JSON.toJSONString(Arrays.asList(arrayConcat(dd,ee,ff))));
}
public static <T> T[] arrayConcat(T[] array1, T[]... array2){
switch (array2.length){
case 0:
break;
default:
for (T t[] : array2) {
array1 = ArrayUtils.addAll(array1, t);
}
break;
}
return array1;
}