多数组合并

将多个元素添加到数组中,或者将两个数组合并,使用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;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值